如何用R函数合并二元矩阵的列?满足或逻辑运算规则
解决方案
你的需求本质是对矩阵的a、b列做**逻辑或(OR)**运算:只要对应位置有一个1,结果就是1;仅当两者都是0时结果为0。不需要用paste拼接字符串,直接通过数值/逻辑运算就能得到目标数值列,以下是具体实现方法:
1. 构造示例矩阵
先还原你的示例数据,方便后续演示:
# 创建示例二元矩阵 mat <- matrix( c(1, 0, 1, 0, 0, 1, 1, 0, 1), nrow = 3, byrow = FALSE, dimnames = list(c("a", "b", "c"), c("a", "b", "c")) )
2. 方法一:逻辑或运算直接转换
利用R中|运算符实现或逻辑,再通过as.integer()把逻辑值(TRUE/FALSE)转为1/0:
# 计算合并列ab ab_col <- as.integer(mat[, "a"] | mat[, "b"]) # 组合新矩阵(保留原c列) new_mat <- cbind(ab = ab_col, mat[, "c"]) # 保持原行名 rownames(new_mat) <- rownames(mat)
运行后得到的new_mat就是你期望的结果:
ab c a 1 1 b 0 0 c 1 1
3. 方法二:行求和判断
通过计算a、b列的行和,只要行和大于0就返回1,否则返回0:
ab_col <- as.integer(rowSums(mat[, c("a", "b")]) > 0) new_mat <- cbind(ab = ab_col, mat[, "c"]) rownames(new_mat) <- rownames(mat)
这个方法逻辑同样直观,适合需要合并多列(不止2列)的场景——只要任意列有1,结果就为1。
内容的提问来源于stack exchange,提问作者EcologyWuhu
相关产品推荐
相关产品推荐

