r - 矩阵/向量的逻辑运算

标签 r

我有一个带有逻辑值的二维矩阵 (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

如果 m1data.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

或者我们可以使用 applyMARGIN=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/

相关文章:

r - 用 Shiny 的 R 设计 DT 中的展开行按钮

r - R 包的 tests/和 inst/tests/之间的区别

r - (R shiny) 使用 ggsave (ggplot2) 将图保存到选择的位置

r - 如何提取 lmer 输出的固定效应部分的相关性

r - data.frame 函数内部 $ 和 [] 之间的区别

r - 使用 R 从 Pubmed 数据中的隶属关系中提取大学名称

r - 减去月份 - 每月最后一天的问题?

r - 反连接但只返回 "previous"缺失行

r - 如何在R中绘制下图?这些类型的图表叫什么?

R - 运行函数以从表列表中每个表的现有列计算新列