2016-08-26 3 views
4

У меня есть два dataframes, один список пар особей, аналогично ниже (но около 150 пар):Найти корреляцию между столбцами, имена которых указаны в качестве значений в другом dataframe

ID_1 ID_2 
X14567 X26789 
X12637 X34560 
X67495 X59023 

Другой dataframe состоит из столбца на человека с численными значениями, относящимися к этим лицам ниже. Все сказало о 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 

Есть ли способ, что я могу вытащить значения из первого dataframe указать имя двух колонок, что мне нужно, чтобы найти корреляции между таким образом, что может быть легко повторяется для каждой строки первого кадра данных?

Большое спасибо за вашу помощь

+2

Не будет ли это быть просто 'применить (DF1, 2, функция (х) кор (df2 [[х [1 ]]], df2 [[x [2]]])) '? –

+1

Если вам просто нужны корреляции между всеми столбцами во втором кадре данных, вы можете сделать «library (reshape2); расплава (COR (DF)) '. – eipi10

ответ

2

Если х и у являются ваши два data.frames и имена столбцов устанавливаются соответствующим образом, вы можете использовать apply.

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

Оттуда просто добавить значение к вашим х 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 
Смежные вопросы