【问题标题】:How to calculate aggregate values "by buckets"?如何“按桶”计算总值?
【发布时间】:2018-10-01 10:07:55
【问题描述】:

我想通过“存储”R 中的副值来计算数据集的聚合值。我不确定这叫什么,但请允许我通过 example 使用 mtcars 进行说明数据集。如果我运行

aggregate(mtcars$mpg, by = list(disp = mtcars$disp), median)

我明白了:

    disp    x
1   71.1 33.9
2   75.7 30.4
3   78.7 32.4
4   79.0 27.3
5   95.1 30.4

这是汽车排量的 mpg。然而,每一个位移都在结果中。我如何运行这个函数,以便它将位移分组到几个桶中,比如每 50 或 20?类似于以下内容:

    disp    x
1   60-80   33.9
2   80-100  30.4
3   100-120 32.4
4   120-140 27.3
5   140-160 30.4

【问题讨论】:

    标签: r aggregate


    【解决方案1】:
    mtcars %>%
      group_by(disp = cut(disp, breaks = 20*0:100)) %>%
      summarize(x = median(mpg))
    
    # A tibble: 15 x 2
       disp          x
       <fct>     <dbl>
     1 (60,80]    31.4
     2 (80,100]   30.4
     3 (100,120]  22.8
     4 (120,140]  21.5
     5 (140,160]  21  
     6 (160,180]  18.5
     7 (220,240]  18.1
     8 (240,260]  21.4
     9 (260,280]  16.4
    10 (300,320]  15.2
    11 (340,360]  15.0
    12 (380,400]  19.2
    13 (420,440]  14.7
    14 (440,460]  10.4
    15 (460,480]  10.4
    

    【讨论】:

      【解决方案2】:

      为了完整起见,data.table 方法:

      require(data.table)
      setDT(mtcars)
      mtcars[, median(mpg), by = .(dispRanges = cut(disp, 5))]
      

      【讨论】:

        猜你喜欢
        • 2021-03-25
        • 2019-04-11
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多