查找名称被指定为另一个数据框中的值的列之间的相关性
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
我有两个数据框,一个是一对个体的列表,类似于下面(但大约有 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