【问题标题】:Pivot using multiple columns使用多列进行透视
【发布时间】:2017-07-17 17:28:43
【问题描述】:

我有一个包含 5 列的数据集:

store_id    year    event    item    units
123         2015     sale_2   abc      2
234         2015     sale_3   def      1
345         2015     sale_2   xyz      5

我正在尝试将items 轮换出store_id, year, and event 以获得sum。比如

store_id    year    event    abc     def   xyz 
123          2015    sale_2   2       0     0
234          2015    sale_3   0       1     0
345          2015    sale_2   0       0     5    

我无法找出最佳方法。通常我会在插入符号中使用 dummyVars 来执行此操作,但我需要总和而不是标志。我看过tapply,但它不能处理超过2个分组变量。

还有其他建议吗?

【问题讨论】:

  • 看起来您的意思是将商店 345 改为商店 123,以便 5 + 2 = 7

标签: r aggregate


【解决方案1】:
library(reshape2)
dcast(df, store_id + year + event ~ item, fun.aggregate = sum, value.var='units')
#    store_id year  event abc def xyz
# 1:      123 2015 sale_2   2   0   0
# 2:      234 2015 sale_3   0   1   0
# 3:      345 2015 sale_2   0   0   5

对于大型数据集考虑

# uses dcast.data.table, much faster
library(data.table)
setDT(df)
dcast(df, store_id + year + event ~ item, fun.aggregate = sum, value.var='units') 

【讨论】:

    【解决方案2】:
    library(dplyr)
    library(tidyr)
    data %>%
    group_by(store_id, year, event, item) %>%
    summarize(N = sum(units)) %>%
    spread(item, N)
    

    您可以使用 dplyr 进行分组和汇总,并使用 tidyr 将数据分散到所需的项目列中。

    【讨论】:

      猜你喜欢
      • 2018-09-07
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多