2013-04-24 51 views
4

我有一個數據幀通過行綁定了許多數據幀,每個數據幀都用唯一鍵標識。我希望計算大數據框的每個子集(使用唯一鍵)的列的相關係數。例如,使用mtcars數據我可能想要計算列hpwtcyl中每個唯一值之間的相關性。我可以做一個循環使用聚合的數據幀子集的相關性

data("mtcars") 
for(i in c(4,6,8)){ 
temp = subset(mtcars,mtcars$cyl==i) 
cor(temp$hp,temp$wt) 
} 

我總覺得會更好,但是這個代碼不工作:

data("mtcars") 
aggregate(mtcars,by=mycars$cyl,cor) 

回答

7

你可以使用

data("mtcars") 
library(plyr) 
ddply(mtcars,"cyl",function(x) cor(x$hp,x$wt)) 

這會將數據在mtcars,cyl中,適用於每個子集x函數cor(x$hp,x$wt)然後聚合data.frame中的每個子集的結果。

我強烈推薦plyr包。這是我在R.


編輯大多數用的包之一:根據要求,這裏dplyr版本。我不得不說,我不是一個大的dplyr用戶,但代碼應該沒問題。

library(dplyr) 
mtcars %>% group_by(cyl) %>% summarise(V1=cor(hp,wt)) 
+0

ddply是完美的! – Alex 2013-04-24 01:25:07

+0

是的,它是這樣的問題的完美包... – cryo111 2013-04-24 01:30:22

+0

所以沒有辦法處理這個使用聚合? – Alex 2013-04-24 01:39:05

7

base R,它的工作爲splitlapplysapply

lapply(split(mtcars, mtcars$cyl), function(X) cor(X$hp, X$wt)) 
## $`4` 
## [1] 0.1598761 
## 
## $`6` 
## [1] -0.3062284 
## 
## $`8` 
## [1] 0.01761795 
## 


sapply(split(mtcars, mtcars$cyl), function(X) cor(X$hp, X$wt)) 
##   4   6   8 
## 0.15987614 -0.30622844 0.01761795 
+0

'by' ='split' +'lapply'。 – thelatemail 2015-12-17 02:21:45