R语言导出相关矩阵Rel到Excel异常:仅显示首行列数值1
问题分析与解决方法
可能的异常原因
- 有效样本量不足:你使用
use="complete.obs"时,会删除所有包含NA的行。如果过滤后剩余样本数少于2,不同变量间的相关系数无法计算(仅能得到变量与自身的相关系数1),最终导出的表格只有对角线的1显示,其余因NA在Excel中为空。 - 列名错误:如果
c('Speed', 'Axis', 'Horz', 'Ext', 'Zone', 'Rel')中存在df里没有的列名,会生成全NA的列,结合use="complete.obs"会过滤掉所有行,导致相关系数矩阵变成1x1的仅含1的矩阵。 - 矩阵导出的包兼容问题:部分
write.xlsx实现(如xlsx包)对矩阵类型的处理不如数据框友好,直接导出可能出现显示异常。
解决步骤
1. 先确认相关系数矩阵的真实状态
运行以下代码查看Rel的维度和内容:
dim(Rel) print(Rel)
- 若
dim(Rel)输出[1] 1 1:检查df的列名,确保你选取的6个列都真实存在于df中,修正拼写错误。 - 若
dim(Rel)输出[1] 6 6但多数值为NA:改用use="pairwise.complete.obs"计算相关系数,它会针对每对变量单独过滤NA行,而非删除所有含NA的行:Rel <- cor(df[, c('Speed', 'Axis', 'Horz', 'Ext', 'Zone', 'Rel')], use="pairwise.complete.obs")
2. 正确导出相关系数矩阵
将矩阵转换为数据框后再导出,避免包的兼容问题:
# 转换为数据框并保留行名 Rel_df <- as.data.frame(Rel) # 导出(以openxlsx包为例,xlsx包语法类似) library(openxlsx) write.xlsx(Rel_df, file = "~/R/Track/correlation.xlsx", sheetName = "Sheet1", colNames = TRUE, rowNames = TRUE)
注:write.xlsx无需赋值给变量,直接运行即可。
内容的提问来源于stack exchange,提问作者mrax25
相关产品推荐
相关产品推荐

