如上所述,我想要OR多列,并且希望这样做而不必显式引用列(d$a | d$b | d$c
),而是使用列名称数组(c(a,b,c)
)
答案 0 :(得分:3)
(df <- data.frame(a = c(T, F, T, T), b = c(T, T, F, T), c = c(F, F, T, T)))
# a b c
# 1 TRUE TRUE FALSE
# 2 FALSE TRUE FALSE
# 3 TRUE FALSE TRUE
# 4 TRUE TRUE TRUE
Reduce(`|`, df)
# [1] TRUE TRUE TRUE TRUE
Reduce(`&`, df)
# [1] FALSE FALSE FALSE TRUE
答案 1 :(得分:1)
据我了解,你想以行|
行。
d = data.frame(a = c(TRUE, FALSE), b = c(FALSE, FALSE))
# a b
# 1 TRUE FALSE
# 2 FALSE FALSE
所以这里的预期结果是c(TRUE, FALSE)
。
您可以对any
中的所有列使用d
:
apply(d, 1, any)
# [1] TRUE FALSE
d
中的命名列:
apply(d[c("a", "b")], 1, any)
# [1] TRUE FALSE
性能考虑因素:
library(microbenchmark)
df <- data.frame(a = c(T, F, T, T), b = c(T, T, F, T), c = c(F, F, T, T))
microbenchmark(
Reduce = Reduce(`|`, df),
apply = apply(df, 1, any))
# Unit: microseconds
# expr min lq mean median uq max neval cld
# Reduce 6.597 8.2275 11.83880 10.0730 13.4080 36.246 100 a
# apply 56.423 59.9425 79.86748 66.8265 105.7645 178.409 100 b