按行划分2个数据帧之间的R相关性

时间:2012-02-03 22:02:01

标签: r plyr correlation

我有2个数据帧w / 5列,每行100行。

id       price1      price2     price3     price4     price5
 1         11.22      25.33      66.47      53.76      77.42
 2         33.56      33.77      44.77      34.55      57.42
...

我想获得相应行的相关性,基本上是

for(i in 1:100){    
cor(df1[i, 1:5], df2[i, 1:5])    
}

但不使用for循环。我假设有人使用plyr来做这件事,但似乎无法做到正确。有什么建议吗?

2 个答案:

答案 0 :(得分:21)

根据您是否需要酷或快的解决方案,您可以使用

diag(cor(t(df1), t(df2)))

这很酷但很浪费(因为它实际上计算了你并不真正需要的所有行之间的相关性,因此它们将被丢弃)或

A <- as.matrix(df1)
B <- as.matrix(df2)
sapply(seq.int(dim(A)[1]), function(i) cor(A[i,], B[i,]))

只能按你的意愿行事,但输入的内容会更多。

答案 1 :(得分:5)

我发现不需要as.matrix

数据框df1df2之间所有行对的相关性:

sapply(1:nrow(df1), function(i) cor(df1[i,], df2[i,]))

和列:

sapply(1:ncol(df1), function(i) cor(df1[,i], df2[,i]))