我有一个带有逻辑列块的data.frame,例如
> tmp <- data.frame(a=c(13, 23, 52),
+ b=c(TRUE,FALSE,TRUE),
+ c=c(TRUE,TRUE,FALSE),
+ d=c(TRUE,TRUE,TRUE))
> tmp
a b c d
1 13 TRUE TRUE TRUE
2 23 FALSE TRUE TRUE
3 52 TRUE FALSE TRUE
我想计算一个汇总列(例如:e),它AND
在整个逻辑列范围内都是逻辑的。换句话说,对于给定的行,如果所有 b:d 都是TRUE
,那么 e 将是TRUE
; 如果有任何 b:d 是FALSE
,那么 e 将是FALSE
。
我的预期结果是:
> tmp
a b c d e
1 13 TRUE TRUE TRUE TRUE
2 23 FALSE TRUE TRUE FALSE
3 52 TRUE FALSE TRUE FALSE
我想通过索引来表示列的范围,因为我有一堆列,而且名称很麻烦。以下代码有效,但我宁愿使用矢量化方法来提高性能。
> tmp$e <- NA
> for(i in 1:nrow(tmp)){
+ tmp[i,"e"] <- all(tmp[i,2:(ncol(tmp)-1)]==TRUE)
+ }
> tmp
a b c d e
1 13 TRUE TRUE TRUE TRUE
2 23 FALSE TRUE TRUE FALSE
3 52 TRUE FALSE TRUE FALSE
有什么方法可以在不使用for
循环遍历data.frame的行的情况下做到这一点?