如何将逻辑向量合并到新列中

时间:2019-02-15 05:59:37

标签: r dataframe

我拥有许多逻辑向量列,并且希望能够将2个或更多列合并为一个,并且如果行中有任何TRUE,则只能在合并列中获得TRUE。

这里是2列和各种组合的示例

X <- c(T,F,T,F,F,T,F,T,T,F,F,F)
Y <- matrix(X,nrow = 6, ncol = 2)
Y
      [,1] [,2]
[1,]  TRUE FALSE 
[2,] FALSE  TRUE
[3,]  TRUE  TRUE
[4,] FALSE FALSE
[5,] FALSE FALSE
[6,]  TRUE FALSE

如何创建第三个列,如果两个都说为False,则将“ true”添加为true,然后将其留下,并且如果要添加3个或更多列,这也将起作用吗?

3 个答案:

答案 0 :(得分:1)

如果所有列中都有逻辑矢量,则可以使用rowSums

cbind(Y, rowSums(Y) > 0)

#      [,1]  [,2]  [,3]
#[1,]  TRUE FALSE  TRUE
#[2,] FALSE  TRUE  TRUE
#[3,]  TRUE  TRUE  TRUE
#[4,] FALSE FALSE FALSE
#[5,] FALSE FALSE FALSE
#[6,]  TRUE FALSE  TRUE

如果任何行中至少有1个TRUE,则返回TRUE,否则返回FALSE。这也适用于任意数量的列。

答案 1 :(得分:0)

使用基于Base R的以下代码

X <- c(T,F,T,F,F,T,F,T,T,F,F,F)
Y <- as.data.frame(matrix(X,nrow = 6, ncol = 2))
unique(Y$V1)

Y$condition <- ifelse(Y$V1 == "TRUE" | Y$V2 == "TRUE","TRUE","FALSE")

答案 2 :(得分:0)

这是使用apply()和逻辑运算符|的可行解决方案,该运算符可用于Y的任意数量的列。

result = cbind(Y, apply(Y, 1, FUN = function (x) Reduce(f="|", x)))
result
#       [,1]  [,2]  [,3]
# [1,]  TRUE FALSE  TRUE
# [2,] FALSE  TRUE  TRUE
# [3,]  TRUE  TRUE  TRUE
# [4,] FALSE FALSE FALSE
# [5,] FALSE FALSE FALSE
# [6,]  TRUE FALSE  TRUE