查找名称被指定为另一个数据框中的值的列之间的相关性

Find correlation between columns whose names are specified as values in another dataframe

我有两个数据框,一个是一对个体的列表,类似于下面(但大约有 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

有没有一种方法可以从第一个数据帧中提取值来指定我需要找到它们之间的相关性的两列的名称,这种方式可以很容易地为第一个数据帧的每一行重复?

非常感谢您的帮助

如果 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

如果您只想要第二个数据框中所有列之间的相关性,您可以这样做:

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