論理的な列のブロックを持つ 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
AND
論理列の全範囲にわたる論理である要約列(たとえば、e)を計算したいと思います。つまり、特定の行について、すべての 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 の行をステップ実行する方法はありますか?