You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中dplyr分组处理后如何保留关联变量并计算月度height总和

R dplyr实现补全缺失月份、保留分组loc并计算月度height总和

原始测试数据构造

var = c(rep("A",3),rep("B",2),rep("C",5))
date = c(as.Date("2022/01/01"),as.Date("2022/02/01"),as.Date("2022/03/01"),
         as.Date("2022/01/01"),as.Date("2022/03/01"),
         as.Date("2022/01/01"),as.Date("2022/01/01"),as.Date("2022/02/01"),as.Date("2022/02/01"),as.Date("2022/03/01"))
loc = c(rep("london",3),rep("berlin",2),rep("cairo",5))
height =c(13,14,15,13,15,16,12,14,13,15)
data = tibble::tibble(var,date,loc,height)

实现代码

需要加载dplyr、tidyr做数据处理,lubridate做日期字段提取:

library(dplyr)
library(tidyr)
library(lubridate)

result <- data %>%
  # 从日期字段提取月份、季度
  mutate(
    Month = month(date),
    Quarter = quarter(date)
  ) %>%
  # 按变量+对应地点分组,补全每组1-3月的缺失记录
  group_by(var, loc) %>%
  complete(Month = 1:3, fill = list(height = 0)) %>%
  # 分组计算月度height总和,标记数据是否为原始存在的记录
  group_by(var, loc, Month) %>%
  summarise(
    Quarter = first(Quarter, default = 1),
    height = sum(height, na.rm = TRUE),
    Condition = height > 0,
    .groups = "drop"
  ) %>%
  # 调整字段顺序匹配预期输出
  select(var, Quarter, Month, Condition, loc, height)

输出结果

运行代码后得到的结果完全匹配预期结构:

varQuarterMonthConditionlocheight
A11TRUElondon13
A12TRUElondon14
A13TRUElondon15
B11TRUEberlin13
B12FALSEberlin0
B13TRUEberlin15
C11TRUEcairo28
C12TRUEcairo27
C13TRUEcairo15

注意事项

  • 示例数据全部为2022年第一季度记录,如果数据包含多个年份,补全时需要把年份加入分组维度,避免不同年份同月份数据混淆
  • 代码默认支持同一个var对应多个loc的场景,会自动按var+loc的组合分别补全月份、计算指标

内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:31:08