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

Ale*_*lex 4 aggregate r correlation

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

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

我认为聚合会更好,但这段代码不起作用:

data("mtcars")
aggregate(mtcars,by=mycars$cyl,cor)
Run Code Online (Sandbox Code Playgroud)

cry*_*111 8

你可以用

 data("mtcars")
 library(plyr)
 ddply(mtcars,"cyl",function(x) cor(x$hp,x$wt))
Run Code Online (Sandbox Code Playgroud)

这个分割数据中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))
Run Code Online (Sandbox Code Playgroud)


Chi*_*til 8

baseR中,它的工作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 
Run Code Online (Sandbox Code Playgroud)