我正在尝试使用从here改编的以下代码将相关矩阵的值打印为有序列表。有人可以解释如何仅从相关矩阵的下半部分获得输出,并让它显示行名和列名而不是colN
吗?
set.seed(1)
df <- data.frame(
col1 = rnorm(10),
col2 = rnorm(10),
col3=rnorm(10)
)
row.names(df)<-c("A","B","C","D","E","F","G","H","I","J")
cors<-cor(df)
library(reshape)
x <- subset(melt(cors), value != 1 | value != NA)
x <- x[with(x, order(-abs(x$value))),]
#x$value<-signif(x$value,2)
head(x)
我希望的例子:
row names col names corr vales
col3 col2 0.60
col2 col1 -0.38
col3 col1 -0.72
答案 0 :(得分:1)
使用lower.tri
索引数据。
cors <- cor(df)
as.data.frame.table(cors)[lower.tri(cors),]
# Var1 Var2 Freq
#2 col2 col1 -0.3767034
#3 col3 col1 -0.7158385
#6 col3 col2 0.6040273
如果您必须更改名称,请将其全部包装在setNames()
:
setNames(as.data.frame.table(cors)[lower.tri(cors),], c("row","col","corr"))