【发布时间】:2020-05-20 10:56:33
【问题描述】:
我有大约 700 个观察值的 df,其中我创建了三个不同的 functions 来使用三种不同的方法计算距离。我想根据条件语句每行运行三个函数之一。我有点像 R 菜鸟,所以到目前为止我所做的是在 for 循环中使用 if 语句。
我想做什么:
sightings <- data.frame(a=c(NA, 1, NA, 1, NA, 1), b=c(NA, NA, "HO", "HO", "LA", "LA"),
c=c(100, 200, 300, 400, 500, 600), d = c(NA, NA, NA, NA, NA, NA))
#our df
> sightings
a b c d
1 NA <NA> 100 NA
2 1 <NA> 200 NA
3 NA HO 300 NA
4 1 HO 400 NA
5 NA LA 500 NA
6 1 LA 600 NA
#desired output
a b c d
1 NA <NA> 100 100
2 1 <NA> 200 200
3 NA HO 300 300
4 1 HO 400 467
5 NA LA 500 500
6 1 LA 600 666
我有两个functions:一个用于使用df$b == "HO" 在df$d 中生成距离,另一个用于df$b == "LA"(两者都包括多个三角函数,包括此处未提及的列中的值)。
所以在df$b == "HO" & df$a != NA 我想运行ho.function,输出在df$d 和df$b == "LA" & df$a != NA 运行la.function 和df$d 输出的情况下
我设计了一个if 语句,我尝试将它放入for 循环,但没有成功(for 循环和if 语句都是新的)
for(i in 1:nrow(df)){
if(df$b[i] == "LA" && is.na(df$a) == FALSE){
df$d <- la.function
} else if (df$b[i] == "HO" && is.na(df$a) == FALSE){
df$d <- ho.function
} else {
df$d <- df$c
}
}
问题是我不断收到df$d == df$c > TRUE,所以感觉就像 R 只是跳过了我的前两个 if 语句?
任何对此有任何知识/经验的人?我是否正确使用了这些功能?
【问题讨论】:
-
la.function和ho.function的输入是什么? -
可能将
is.na(df$a)更改为is.na(df$a[i])和df$d更改为df$d[i] -
输入是另一列的弧度(
ho.function),la.function的弧度和距离。我在不同的参数中添加了[i],但仍然没有 -
您需要使此示例可重现,您已共享数据但不清楚如何应用
la.function以及它返回的输出是什么。您只是将la.function分配给df$d。就像分配函数mean一样,除非你像mean(1:10)那样传递一些值给它,否则没有任何意义。
标签: r loops dataframe if-statement