使用向量化操作创建以DF的多个单元为条件的变量

时间:2014-01-31 04:37:46

标签: r

我希望在A为真之后为行2设置myDF $ cut为true,除非这两行中的b个单元格的值加起来超过2.我用for循环完成了但是我'我觉得它运行得很慢,所以我希望有办法避免循环。

set.seed(55)

myDF <- data.frame( a=as.logical (rbinom(136063,1,0.1)), 
                    b=rbinom(136063,2,0.2))

myDF$cut <- F
for (i in 3:length (myDF$a)) {
if (myDF$a[i-1] & myDF$b[i] <2) myDF$cut[i]<- T
if (myDF$a[i-2]& (myDF$b[i]+myDF$b[i-1]) < 2) myDF$cut[i] <- T 
}

1 个答案:

答案 0 :(得分:1)

例如,你可以这样做,它至少快1000倍:

transform(myDF,
          cut = ifelse( c(FALSE,head(a,-1)) & b<2 |
                          c(FALSE,FALSE,head(a,-2)) & (b+c(0,head(b,-1)) < 2),
                        TRUE,
                        FALSE
          )
)