2012-02-03 70 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]))