我希望在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
}
答案 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
)
)