2012-02-03 40 views
10

我有2个数据帧,每个数据帧有5列和100行。按行排列的2个数据帧之间的R关联

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来做到这一点,但似乎无法做到。有什么建议么?

回答

20

根据您是否想要一个很酷的或快速的解决方案,你可以使用

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

1即第一个是凉爽。另外,'t(as.matrix(df1))'可以变成't(df1)'等等,因为当t()传递一个data.frame时,对矩阵的强制转换是隐含的。 – 2012-02-03 22:22:21

+0

啊,太好了,谢谢(这是我的底层思维让我感受到的地方)),我会编辑 – 2012-02-03 22:51:21

+0

那就行了。非常感谢你。 – screechOwl 2012-02-03 23:24:10

4

我发现as.matrix不是必需的。所有对dataframes df1df2之间的行的

相关性:

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

和列:

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