【问题标题】:dplyr group_by and cummean functionsdplyr group_by 和 cummean 函数
【发布时间】:2014-06-04 03:19:41
【问题描述】:

我预计下面的代码会输出一个三行的数据框,每一行代表计算每组cyl的平均值后mpg的累积平均值:

library(dplyr)
mtcars %>%
arrange(cyl) %>%
group_by(cyl) %>%
summarise(running.mean.mpg = cummean(mpg))

这是我预期会发生的:

mean_cyl_4 <- mtcars %>% 
filter(cyl == 4) %>%
summarise(mean(mpg))

mean_cyl_4_6 <- mtcars %>% 
filter(cyl == 4 | cyl == 6) %>%
summarise(mean(mpg))

mean_cyl_4_6_8 <- mtcars %>% 
filter(cyl == 4 | cyl == 6 | cyl == 8) %>%
summarise(mean(mpg))

data.frame(cyl = c(4,6,8), running.mean.mpg = c(mean_cyl_4[1,1], mean_cyl_4_6[1,1], mean_cyl_4_6_8[1,1]))

  cyl running.mean.mpg
1   4     26.66364
2   6     23.97222
3   8     20.09062

dplyr 怎么好像忽略了group_by(cyl)

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这如你所愿。

    mtcars %>%
    arrange(cyl) %>%
    mutate(running.mean.mpg = cummean(mpg)) %>%
    select(cyl, running.mean.mpg)%>%
    group_by(cyl)%>%
    summarize(target=last(running.mean.mpg))
    

    【讨论】:

      【解决方案2】:
      require("dplyr")
      
      mtcars %>%
        arrange(cyl) %>%
        group_by(cyl) %>%
        mutate(running.mean.mpg = cummean(mpg)) %>%
        select(cyl, running.mean.mpg)
      
      # Source: local data frame [32 x 2]
      # Groups: cyl
      # 
      # # cyl running.mean.mpg
      # # 1    4         22.80000
      # # 2    4         23.60000
      # # 3    4         23.33333
      # # 4    4         25.60000
      # # 5    4         26.56000
      # # 6    4         27.78333
      # # 7    4         26.88571
      # # 8    4         26.93750
      

      为了实验,这也适用于data.table。 我的意思是,您还必须加载 dplyr 才能使 cummean() 可用。

      require("data.table")
      DT <- as.data.table(mtcars)
      DT[,j=list(
        running.mean.mpg = cummean(mpg)
        ), by="cyl"]
      

      【讨论】:

      • Martin 仍然不是我所期望的。查看我的编辑,它显示了我希望输出的 data.frame
      • 好吧,您似乎对group_by 应该做什么感到困惑。它基于变量进行分组。您现在要求的是基于不同过滤条件的结果(平均值)。这就是为什么 cummeangroup_by 不起作用,它们是为了别的东西。
      【解决方案3】:

      使用mutate 而不是summarise

      【讨论】:

        猜你喜欢
        • 2018-05-12
        • 1970-01-01
        • 2015-11-18
        • 2019-12-20
        • 1970-01-01
        • 1970-01-01
        • 2021-02-14
        • 1970-01-01
        • 2017-07-12
        相关资源
        最近更新 更多