如何在相关矩阵中提取相关性>0.8的行列名称而非数值
解决R中相关矩阵高相关性条目标签提取问题
嘿,我明白你的问题了——你已经成功定位到相关矩阵里相关性大于0.8的位置,但想把返回的数字行列索引换成实际的变量名称对吧?别担心,这其实很容易解决,我们只需要把这些数字索引映射回相关矩阵的行/列名称就好。
你的现有代码分析
你已经用which(dat2 > 0.8, arr.ind = TRUE)得到了高相关性条目的位置矩阵dat3,但里面的row和col列是数字索引,对应dat2(相关矩阵)的行和列位置。而dat2的行名和列名正好就是原数据集mtcars的变量名,所以我们可以直接用rownames()和colnames()来提取对应的标签。
解决方案代码
方法1:直接转换现有dat3的索引为标签
dat <- mtcars dat2 <- cor(dat) diag(dat2) <- NA dat3 <- which(dat2 > 0.8, arr.ind = TRUE) # 把数字索引转换成变量名称 dat3 <- as.data.frame(dat3) # 转成数据框更方便操作 dat3$row <- rownames(dat2)[dat3$row] dat3$col <- colnames(dat2)[dat3$col] # 查看结果 dat3
运行后你会得到这样的结果:
row col disp disp cyl hp hp cyl cyl cyl disp wt wt disp cyl cyl hp disp disp wt
方法2:一步生成带标签和相关值的结果
如果想同时看到对应的相关系数,可以直接生成包含变量对和相关值的数据框:
high_cor <- data.frame( 变量1 = rownames(dat2)[dat3[, 1]], 变量2 = colnames(dat2)[dat3[, 2]], 相关系数 = dat2[dat3] ) # 查看结果 high_cor
输出会是:
变量1 变量2 相关系数 disp disp cyl 0.9020329 hp hp cyl 0.8324475 cyl cyl disp 0.9020329 wt wt disp 0.8879799 cyl cyl hp 0.8324475 disp disp wt 0.8879799
可选优化:去除重复配对
你会发现结果里有重复的配对(比如disp-cyl和cyl-disp其实是同一对相关关系),如果想只保留唯一的配对,可以添加这一步:
# 按变量名排序后筛选唯一配对 high_cor_unique <- high_cor[high_cor$变量1 < high_cor$变量2, ] rownames(high_cor_unique) <- NULL # 重置行名 # 查看去重后的结果 high_cor_unique
最终去重结果:
变量1 变量2 相关系数 1 cyl disp 0.9020329 2 cyl hp 0.8324475 3 disp wt 0.8879799
内容的提问来源于stack exchange,提问作者Joep_S
相关产品推荐
相关产品推荐

