在另一个数据框中指定的列名之间找到相关性。

4

我有两个数据框,一个是一组成对的个体列表,类似于下面的示例(但大约有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
这不就是 apply(df1, 2, function(x) cor( df2[[ x[1] ]], df2[[ x[2] ]] ) ) 吗? - IRTFM
1
如果你只想要第二个数据框中所有列之间的相关性,你可以使用library(reshape2); melt(cor(df))来实现。 - eipi10
2个回答

2
如果 x 和 y 是两个数据帧且列名已经设置正确,您可以使用 apply 函数进行操作。
apply(x, 1, function(row) cor(y[row[1]], y[row[2]]))

然后将这些值添加到您的x数据框中:

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
如果您只想获取第二个数据框中所有列之间的相关性,则可以执行以下操作:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接