2016-02-02 48 views
1

我想報告(融合)相關矩陣中的所有唯一值。報告cor()的唯一組合輸出

如果我做的:

melt(cor(x,method="pearson",use="complete.obs")) 

我會得到:

VarA VarA 1 
VarA VarB 0.001 
VarA VarC -0.002 
VarB VarB 1 
VarB VarA 0.001 
VarB VarC 0.003 
VarC VarC 1 
VarC VarA -0.002 
VarC VarB 0.003 

但是一些行有效的報告同樣的事情,即VarA VarB = VarB VarA,所以我真正想要的是:

VarA VarA 1 
VarA VarB 0.001 
VarA VarC -0.002 
VarB VarB 1 
VarB VarC 0.003 
VarC VarC 1 

或者更好的作爲獎勵去除與自己相關的變量,所以我onl Ÿ獲得:

VarA VarB 0.001 
VarA VarC -0.002 
VarB VarC 0.003 
+1

什麼是上面'x'? – nrussell

+0

@nrussell - 一個數據框 – brucezepplin

+1

'dput(x)'怎麼樣? – nrussell

回答

8

你可以在矩陣,這是工作更輕鬆:

res <- cor(iris[,-5]) 
res[lower.tri(res)] <- NA #assuming there are no actual NAs already 
          # which seems likely with complete.obs 
#use lower.tri(res, diag = TRUE) to remove the diagonal too 
na.omit(reshape2::melt(res)) 

#   Var1   Var2  value 
#1 Sepal.Length Sepal.Length 1.0000000 
#5 Sepal.Length Sepal.Width -0.1175698 
#6 Sepal.Width Sepal.Width 1.0000000 
#9 Sepal.Length Petal.Length 0.8717538 
#10 Sepal.Width Petal.Length -0.4284401 
#11 Petal.Length Petal.Length 1.0000000 
#13 Sepal.Length Petal.Width 0.8179411 
#14 Sepal.Width Petal.Width -0.3661259 
#15 Petal.Length Petal.Width 0.9628654 
#16 Petal.Width Petal.Width 1.0000000 
+0

'res [lower.tri(res)] < - NA'這是一個非常整齊的治療謝謝 – brucezepplin

1

你可以做兩步法:

#starting from: 
x <- melt(cor(x,method="pearson",use="complete.obs")) 
#subset first the variable 3 when it is equal to 1 
x <- subset(x, V3 != 1) 
#remove duplicate entries in that same variable 
x[duplicated(x$V3),] 
V1 V2  V3 
5 VarB VarA 0.001 
8 VarC VarA -0.002 
9 VarC VarB 0.003