我有一个带有逻辑值的二维矩阵 (TRUE
/FALSE
)。
我需要的是一个结果向量,它表示每行元素的逻辑或。
head(m1)
Z1 Z2 Z3 Z4 Z5 Z6 ZZ
1 TRUE FALSE FALSE FALSE FALSE FALSE FALSE
2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
3 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
4 FALSE FALSE FALSE TRUE FALSE FALSE FALSE
5 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
6 FALSE FALSE TRUE FALSE FALSE FALSE FALSE
生成的向量(一个暗淡矩阵)应该如下所示。
RZ2
1 TRUE
2 FALSE
3 FALSE
4 TRUE
5 FALSE
6 TRUE
据我了解,一种选择是使用 *apply
函数。
但是要使用哪个函数参数呢?
最佳答案
我们可以使用 rowSums
对每行中的 TRUE
值进行求和
。然后,我们双重否定 (!!
) 以转换回逻辑向量,这样所有非 '0' 的元素都将为 TRUE
并且 '0' 被强制为 FALSE
。
v1 <- unname(!!rowSums(m1))
v1
#[1] TRUE FALSE FALSE TRUE FALSE TRUE
如果 m1
是 data.frame
,则另一个选项是 pmax
。如果每行中存在 TRUE,则返回 1(表示 TRUE
);仅表示 FALSE
值,返回 0。这可以转换回逻辑向量 (!=0
)。
v1 <- do.call(pmax, as.data.frame(m1))!=0
v1
#[1] TRUE FALSE FALSE TRUE FALSE TRUE
或者我们可以使用 apply
和 MARGIN=1
以及 any
作为 FUN
来循环遍历行。如果存在任何
TRUE 元素,它将返回TRUE
,否则返回FALSE。
v1 <- unname(apply(m1, 1, any))
v1
#[1] TRUE FALSE FALSE TRUE FALSE TRUE
上面的输出向量
可以转换为矩阵
matrix(v1, ncol=1, dimnames=list(seq_along(v1), 'RZ2'))
# RZ2
#1 TRUE
#2 FALSE
#3 FALSE
#4 TRUE
#5 FALSE
#6 TRUE
数据
m1 <- structure(c(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), .Dim = 6:7,
.Dimnames = list(
c("1", "2", "3", "4", "5", "6"), c("Z1", "Z2", "Z3", "Z4",
"Z5", "Z6", "ZZ")))
关于r - 矩阵/向量的逻辑运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32456929/