或者(或任何逻辑运算符)将R中的许多列放在一起

时间:2016-03-12 14:55:41

标签: r

如上所述,我想要OR多列,并且希望这样做而不必显式引用列(d$a | d$b | d$c),而是使用列名称数组(c(a,b,c)

2 个答案:

答案 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