如何基于ID列表填充R矩阵:将不在列表中的行设为NA
解决方法
可以通过匹配行名与ID列表的方式快速定位需要替换的行,再将这些行的所有元素设为NA,具体代码如下:
id_list <- c(1079, 1081, 1082, 1083) mat <- matrix(1, nrow = 5, ncol = 5) rownames(mat) <- colnames(mat) <- c(1079, 1080, 1081, 1082, 1083) # 核心操作:定位行名不在id_list中的行,赋值为NA mat[!rownames(mat) %in% as.character(id_list), ] <- NA
代码说明
rownames(mat) %in% as.character(id_list):判断每一行的行名是否在ID列表中,返回一个逻辑向量(符合条件为TRUE,不符合为FALSE)- 前面加
!取反,就能得到行名不在ID列表中的行的位置 - 最后将这些行的所有列元素统一赋值为
NA
执行代码后,矩阵会生成你期望的结果:
| 1079 | 1080 | 1081 | 1082 | 1083 | |
|---|---|---|---|---|---|
| 1079 | 1 | 1 | 1 | 1 | 1 |
| 1080 | NA | NA | NA | NA | NA |
| 1081 | 1 | 1 | 1 | 1 | 1 |
| 1082 | 1 | 1 | 1 | 1 | 1 |
| 1083 | 1 | 1 | 1 | 1 | 1 |
内容的提问来源于stack exchange,提问作者Polina Ermolaeva
相关产品推荐
相关产品推荐

