使用聚合关联数据框的子集

时间:2013-04-24 01:09:12

标签: r aggregate correlation

我有一个数据框由行绑定许多数据帧,每个数据帧用唯一键标识。我希望计算大数据帧的每个子集(使用唯一密钥)中的列的相关系数。例如,使用mtcars数据我可能想要计算列hp中每个唯一值的列wtcyl之间的相关性。我可以在一个循环中完成它

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)

2 个答案:

答案 0 :(得分:7)

您可以使用

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

这会将mtcars中的数据按cyl拆分,适用于函数x的每个子集cor(x$hp,x$wt),然后汇总数据中每个子集的结果。帧。

我强烈推荐plyr套餐。这是我在R中使用最多的软件包之一。


编辑:根据请求,此处为dplyr版本。我不得不说我不是一个很大的dplyr用户,但代码应该没问题。

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

答案 1 :(得分: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