2016-08-26 35 views
4

我有兩個dataframes列之間的相關性,一類是對個人的名單,類似如下(但有大約150對):找到他們的名字被指定爲值在另一個數據幀

ID_1 ID_2 
X14567 X26789 
X12637 X34560 
X67495 X59023 

其他數據框由每個人一欄組成,數值與下面的個人有關。全部被告知約300列和300行。例如:

X14567 X12637 X26789 X67495 X34560 X59023 
0.41 0.29 0.70 0.83 0.41 0.30 
0.59 0.44 0.20 0.94 0.03 0.97 
0.48 0.91 0.78 0.92 0.40 0.09 
0.07 0.21 0.42 0.14 0.96 0.96 
0.33 0.13 0.53 0.04 0.52 0.49 
0.94 0.28 0.37 0.26 0.11 0.09 

我想找出每對個體之間這些值的相關性。喜歡的東西來結束:

ID_1  ID_2 Correlation 
X14567  X26789  -0.25 
X12637  X34560  -0.25 
X67495  X59023  -0.11 

有沒有辦法,我可以從第一數據框拉值的方式來指定,我需要找到之間的相關性以這樣的方式,可以是兩列的名稱輕鬆重複第一個數據幀的每一行?

非常感謝您的幫助

+2

這是不是隻是'申請(DF1,2,函數(x)的COR(DF2 [[×[1- ]]],df2 [[x [2]]])'? –

+1

如果你只是想要你的第二個數據框中的所有列之間的相關性,你可以做'library(reshape2);熔體(COR(DF))'。 – eipi10

回答

2

如果X和Y是你的兩個data.frames和列名都設置得當,你可以使用apply

apply(x, 1, function(row) cor(y[row[1]], y[row[2]])) 

從那裏正好值添加到您的X data.frame:

x$cor <- apply(x, 1, function(row) cor(y[row[1]], y[row[2]])) 


     V1  V2  cor 
2 X14567 X26789 -0.2515737 
3 X12637 X34560 -0.2563294 
4 X67495 X59023 -0.1092830 
+1

輝煌,謝謝你,完美的工作! – Caragh

1

如果你只是想在你的第二個數據幀中的所有列之間的相關性,你可以這樣做:

library(reshape2) 

df.corr = melt(cor(df)) 

要刪除重複的列(即,每列的與其自身的相關性):

df.corr = subset(df.corr, Var1 != Var2) 

例如使用內置mtcars數據幀:

mtcars.corr = melt(cor(mtcars)) 
Var1 Var2  value 
1 mpg mpg 1.00000000 
2 cyl mpg -0.85216196 
3 disp mpg -0.84755138 
... 
119 am carb 0.05753435 
120 gear carb 0.27407284 
121 carb carb 1.00000000 
相關問題