2011-06-13 59 views
1

我有一個數據幀如下:Pearson相關

x <- data.frame(Name=c("a", "b","c", "d", "e"),A=(1:5), B=(2:6), C=(7:11), D=c(1,1,1,1,1)) 

我想包括的所有皮爾森係數對B,A對C,A對d,A對E,B Vs的一個數據幀,b對c,b對d,b對e ....等(不包括自我比較,即aa,bb等)。

爲了話,我想改變下列數據幀

  A B C D 
a 1 2 7 1 
b 2 3 8 1 
c 3 4 9 1 
d 4 5 10 1 
e 5 6 11 1 

一個結果數據幀像這樣

a b 0.989143436 
a c 0.963282002 
a d 0.93048421 
a e 0.89585579 
b c 0.9922798 
b d 0.974216034 
b e 0.951427811 
c d 0.994675789 
c e 0.982264673 
d e 0.996357429 

請好心指示這樣做的有效方式。

編輯

感謝Michaelv2的幫助。

基於建議的代碼,我發現的結果如下:

X1 X2 value 
1 A A  1 
2 B A  1 
3 C A  1 
4 D A NA 
5 A B  1 
6 B B  1 
7 C B  1 
8 D B NA 
9 A C  1 
10 B C  1 
11 C C  1 
12 D C NA 
13 A D NA 
14 B D NA 
15 C D NA 
16 D D  1 

錯誤消息是「 警告消息: 在COR(X [2:5],方法= 」皮爾森「 ):標準偏差爲零「

在我看來,我可能誤用了代碼,你能否請進一步指示如何進一步解決這個問題?謝謝。

回答

3

您可以使用類似以下內容:

require(reshape) 

y <- as.data.frame(t(x[2:5]), stringsAsFactors=FALSE) 
colnames(y) <- x[[1]] 

yrho <- melt(cor(y, method="pearson")) 
subset(yrho, yrho$X1 != yrho$X2) 

結果:

X1 X2  value 
2 b a 0.9891434 
3 c a 0.9632820 
4 d a 0.9304842 
5 e a 0.8958558 
6 a b 0.9891434 
8 c b 0.9922798 
9 d b 0.9742160 
10 e b 0.9514278 
11 a c 0.9632820 
12 b c 0.9922798 
14 d c 0.9946758 
15 e c 0.9822647 
16 a d 0.9304842 
17 b d 0.9742160 
18 c d 0.9946758 
20 e d 0.9963574 
21 a e 0.8958558 
22 b e 0.9514278 
23 c e 0.9822647 
24 d e 0.9963574 
+0

嗯,行標籤可能是行標籤,就沒有必要忽略他們,那麼。另外,OP要求行 - 行相關,而不是列 - 列(但一個't'將完成這項工作)。 – mbq 2011-06-13 07:55:55

+0

從技術上講,我省略了數據框的第一列(一個字符或因子向量,取決於您的設置),而不是行標籤,但是您對行相關性非常正確。感謝您指出了這一點。 – michaelv2 2011-06-13 10:15:03