我有两个数据框,一个是个人对的列表,类似于下面(但有大约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
有没有办法可以从第一个数据帧中提取值,以指定我需要找到两个列的名称,以便以第一个数据帧的每一行可以轻松重复的方式找到它们之间的相关性? / p>
非常感谢你的帮助
答案 0 :(得分: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 :(得分: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