分组,汇总和转置一步到位

时间:2016-09-20 13:21:35

标签: r group-by transpose summarize

我有一个看起来像这样的数据框

      Vehicle Model Month Sales
      A   XXY     1    10
      A   XXY     1   100
      A   XXY     2    40
      A   XXY     3    10
      A   YYX     3    10
      A   YYX     3    33
      B   ZZZ     1    50
      B   ZZY     2    60

我希望能够按如下方式对其进行转换:

      Vehicle Model 1 2 3 4 5
       A      XXY  2  1  1  0  0
       A      YYX  0  0  2  0  0
       B      ZZZ  1  0  0  0  0
       B      ZZY  0  1  0  0  0

基本上我想要 - 分组2个字段(Vehicle,Model),然后计算“Sales”BY BY列中的记录数,并转置数据,使Month变为列,Vehicle / Model为我的行。有些型号最长可能不会有12个月,但我希望显示所有第1列到第12列,如果没有数据则显示0

数据框非常大。有什么建议?感谢

1 个答案:

答案 0 :(得分:0)

不确定"一步"部分问题。通过几个步骤完成它并不起作用?

library(data.table)
s <- "      Vehicle Model Month Sales
      A   XXY     1    10
      A   XXY     1   100
      A   XXY     2    40
      A   XXY     3    10
      A   YYX     3    10
      A   YYX     3    33
      B   ZZZ     1    50
      B   ZZY     2    60"
dt <- fread(s)

dt[, sale_count := .N, by = .(Vehicle, Model, Month)]
dt[, Sales := NULL]
dt <- unique(dt)
dcast(dt, Vehicle + Model ~ Month, value.var = "sale_count")

结果:有几个月没有NA而不是0。如果需要,可以将其更改为0.

   Vehicle Model  1  2  3
1:       A   XXY  2  1  1
2:       A   YYX NA NA  2
3:       B   ZZY NA  1 NA
4:       B   ZZZ  1 NA NA