【问题标题】:Sum by two variables由两个变量求和
【发布时间】:2026-02-16 03:35:34
【问题描述】:

我有一个数据框:

       Date  area      sales
1     201204 shanghai    23
2     201204 beijing     25
3     201204 beijing     16
4     201205 shanghai    55
5     201205 beijing     17
6     201205 shanghai    16

我要输出的是如下表格:

Date   shanghai  beijing 
201204  23        41
201205  71        17

我将如何在 R 中做到这一点?

【问题讨论】:

标签: r sum


【解决方案1】:

在基础 R 中(对于 sum)有 xtabs

> xtabs(sales ~ Date + area, mydf)
        area
Date     beijing shanghai
  201204      41       23
  201205      17       71

要将其作为data.frame 获取,请将其包装在as.data.frame.matrix 中。


要使用最近流行的方法来更新它,您还可以使用“dplyr”(用于聚合)和“tidyr”(用于重塑)的组合,如下所示:

library(tidyr)
library(dplyr)
mydf %>% 
  group_by(Date, area) %>% 
  summarise(sales = sum(sales)) %>% 
  spread(area, sales)
# Source: local data frame [2 x 3]
# 
#     Date beijing shanghai
# 1 201204      41       23
# 2 201205      17       71

【讨论】:

    【解决方案2】:

    这是reshape2::dcast的炮灰

    library(reshape2)
    # assuming your data is called `D`
    dcast(Date~area, value.var = 'sales', fun.aggregate = sum, data = D)
    

    【讨论】: