R语言中按指定条件删除矩阵行的基础R解决方案求助
基础R解决方案
首先,我们需要构建一个逻辑向量标记需保留的行,核心是准确判断每行是否符合保留规则:
- 若
cond[1]为0,排除第1列或第3列包含1的行;若为1,保留所有行 - 若
cond[2]为0,排除第2列或第4列包含1的行;若为1,保留所有行
以下是实现代码:
# 定义原始矩阵 testMat <- matrix(c(1,2,1,3, 3,2,3,3, 1,3,1,3, 2,3,3,3, 3,3,3,3, 3,2,3,1), byrow = T, ncol = 4) # 定义二元条件(可替换为c(0,1), c(1,0), c(1,1)) cond <- c(0,0) # 初始化保留行的逻辑向量 keep_rows <- TRUE # 处理第一个条件 if (cond[1] == 0) { # 排除第1/3列存在1的行 keep_rows <- keep_rows & !(rowSums(testMat[, c(1,3)] == 1) > 0) } # 处理第二个条件 if (cond[2] == 0) { # 排除第2/4列存在1的行 keep_rows <- keep_rows & !(rowSums(testMat[, c(2,4)] == 1) > 0) } # 生成过滤后的新矩阵 newMat <- testMat[keep_rows, ]
代码说明
rowSums(testMat[, c(1,3)] == 1):计算每行中第1、3列等于1的元素数量,结果大于0则说明该行这两列至少有一个1!(rowSums(...) > 0):取反后得到该行这两列均无1的逻辑值,符合cond[1]为0时的保留要求- 两个条件通过
&组合,只有同时满足两个保留规则的行才会被保留
验证结果
- 当
cond <- c(0,0),排除第1、3、6行,与示例结果一致 - 当
cond <- c(0,1),仅排除第1、3行,结果正确 - 当
cond <- c(1,0),仅排除第6行,结果正确 - 当
cond <- c(1,1),所有行保留,结果正确
内容的提问来源于stack exchange,提问作者Rel_Ai
相关产品推荐
相关产品推荐

