【问题标题】:Group, Summarize and transpose in one step一步完成分组、汇总和转置
【发布时间】:2016-09-20 13:21:35
【问题描述】:

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

      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 个字段(车辆、模型)分组,然后按月份计算“销售”列中的记录数,然后转置数据,使月份成为列,车辆/模型成为我的行。此外,某些模型可能没有长达 12 个月,但我想显示所有列 1 到 12,如果没有可用数据则保留 0

数据框非常大。有什么推荐吗?谢谢

【问题讨论】:

  • 数据头应与列对齐。起初我以为最后一列是“月销售额”。

标签: r group-by transpose summarize


【解决方案1】:

不确定问题的“一步”部分。分几步做不行吗?

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

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 2019-09-29
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多