R语言技术问询:如何获取矩阵中满足数值条件的唯一列名
提取矩阵中满足条件元素的唯一列名
没问题,我来帮你搞定这个需求!首先咱们先重现你的矩阵数据,确保和你给出的一致:
set.seed(1234) M = matrix(sample(20,20), ncol=4) colnames(M) = letters[1:4] M # a b c d # [1,] 3 10 7 9 # [2,]12 1 5 17 # [3,]11 4 20 16 # [4,]18 8 15 19 # [5,]14 6 2 13
接下来,要获取所有数值小于5的元素对应的唯一列名,可以用以下一行代码实现:
unique(colnames(M)[col(M)[M < 5]]) # [1] "a" "b" "c"
代码分步解释:
M < 5:生成一个和矩阵M维度完全一致的逻辑矩阵,所有值小于5的位置标记为TRUE,其余为FALSE。col(M):生成一个和M同维度的矩阵,每个位置存储该元素所在的列索引(比如第一列是1,第二列是2,以此类推)。col(M)[M < 5]:通过逻辑矩阵筛选,提取出所有满足条件的元素对应的列索引,得到向量c(1,2,2,3)。colnames(M)[...]:把列索引转换成对应的列名,得到包含重复值的列名向量c("a","b","b","c")。unique():去掉重复的列名,最终得到你想要的唯一列名向量c("a","b","c")。
如果你的矩阵规模很大,这个方法的效率也很高,因为它是基于向量化操作的,比循环或者apply类函数更快~
内容的提问来源于stack exchange,提问作者John legend2
相关产品推荐
相关产品推荐

