我拥有许多逻辑向量列,并且希望能够将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个或更多列,这也将起作用吗?
答案 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