首页 文章

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

提问于
浏览
4

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

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 回答

  • 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 版本 . 我不得不说我不是一个大用户,但代码应该没问题 .

    library(dplyr)
    mtcars %>% group_by(cyl) %>% summarise(V1=cor(hp,wt))
    
  • 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
    

相关问题