我有一个数据框由行绑定许多数据帧,每个数据帧用唯一键标识。我希望计算大数据帧的每个子集(使用唯一密钥)中的列的相关系数。例如,使用mtcars数据我可能想要计算列hp
中每个唯一值的列wt
和cyl
之间的相关性。我可以在一个循环中完成它
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)
答案 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中,split
和lapply
或sapply
的作业
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