矩阵子集化:保留未被提取的信息
解决方法
要获取矩阵A中未被存入B的行(也就是A的前两行),且无需手动指定行索引,可以通过以下几种方式实现:
方法1:利用行索引的差集
通过setdiff函数计算A的所有行索引与B的行索引的差集,直接提取目标行:
A <- matrix(c(1:25),nrow=5,ncol=5) B <- A[-c(1:2),] # 计算A中未出现在B里的行索引,再提取对应行 A_red <- A[setdiff(seq_len(nrow(A)), as.integer(rownames(B))), ]
方法2:逻辑索引标记
生成逻辑向量标记A中哪些行未被B包含,再筛选出目标行:
A <- matrix(c(1:25),nrow=5,ncol=5) B <- A[-c(1:2),] # 创建标记向量,初始全为TRUE row_marker <- rep(TRUE, nrow(A)) # 将B对应的行标记为FALSE row_marker[as.integer(rownames(B))] <- FALSE # 提取未被标记的行 A_red <- A[row_marker, ]
方法3:用dplyr的反连接(需加载包)
如果习惯用tidyverse工具,可以将矩阵转成数据框后用anti_join筛选:
library(dplyr) A <- matrix(c(1:25),nrow=5,ncol=5) B <- A[-c(1:2),] # 转成数据框后做反连接,再转回矩阵 A_red <- as.matrix(anti_join(as.data.frame(A), as.data.frame(B)))
内容的提问来源于stack exchange,提问作者user21573410
相关产品推荐
相关产品推荐

