我有以下2列
lower=rnorm(10,0,1)
upper=rnorm(10,1,1)
dd=data.frame(lower,upper)
我想知道是否对于每行,下<0.5和上>1。我使用如下的for循环来做到这一点,
cc=c()
for(i in 1: 10 ){
cc[i]= ifelse( ( dd$upper[i] > 1 && dd$lower[i] < 0.5 ),1,0
)
}
但是我想使用适当的套用功能之一来做到这一点。由于数据在数据框中,因此我尝试使用apply函数。这是我的代码,
apply(dd , 1, function (i,j) {ifelse( (dd$i> 0.5 && dd$j<0.5) ,0,1 )
}
)
我正在得到NA。如果有人帮助我找出错误,这真的很有帮助
谢谢
答案 0 :(得分:4)
我认为,与您尝试过的解决方案相比,以下解决方案要容易得多。看看
set.seed(10)
lower=rnorm(10,0,1)
upper=rnorm(10,1,1)
dd=data.frame(lower,upper)
dd$flag<-ifelse((dd$lower < 0.5 & dd$upper > 1),1,0)
这将为您提供所需的输出。
答案 1 :(得分:1)
错误在于定义FUN
中函数参数apply
的输入。将此输入视为完整的数组,而不是数组的单个元素。
set.seed(10)
lower <- rnorm(10,0,1)
upper <- rnorm(10,1,1)
dd <- data.frame(lower,upper)
apply(dd, 1, FUN=function(x){ifelse(x[1] < 0.5 && x[2] > 1, 1, 0)})
[1] 1 1 0 1 1 1 0 0 1 1
或者,您也可以
apply(dd , 1, FUN = function (x) {ifelse(x["lower"] < 0.5 && x["upper"] > 1, 1, 0)})