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

如何在R语言管道操作中基于不同时间维度创建变量

解决R语言管道中多时间维度统计的问题

情况1:原始数据每行对应一个物品

如果你的dataset里每行是一个单独的物品记录(包含group和month列),可以通过两次分组实现需求:

abc <- dataset %>%
  # 第一步:按group分组,计算每组全年总物品数,添加为新列
  group_by(group) %>%
  mutate(TotItemsYear = n()) %>%
  # 第二步:保留group分组的同时,新增month分组
  group_by(group, month, .add = TRUE) %>%
  summarize(
    TotItemsMonth = n(),  # 统计每组每月的物品总量
    TotItemsYear = first(TotItemsYear),  # 同一组的全年总量一致,取第一个值即可
    ratio = TotItemsMonth / TotItemsYear,  # 计算目标比率
    .groups = "drop"  # 可选:取消分组,将结果转为普通数据框
  )

情况2:原始数据已按组和月汇总

如果你的dataset是提前汇总好的格式(比如有item_count列表示某组某月的物品数量),只需把统计逻辑从计数改为求和:

abc <- dataset %>%
  group_by(group) %>%
  mutate(TotItemsYear = sum(item_count)) %>%
  group_by(group, month, .add = TRUE) %>%
  summarize(
    TotItemsMonth = sum(item_count),
    TotItemsYear = first(TotItemsYear),
    ratio = TotItemsMonth / TotItemsYear,
    .groups = "drop"
  )

另一种分步实现思路

要是觉得嵌套分组绕,也可以拆分步骤分别计算后合并:

# 计算每组每月的物品总量
monthly_data <- dataset %>%
  group_by(group, month) %>%
  summarize(TotItemsMonth = n(), .groups = "drop")

# 计算每组全年的物品总量
yearly_data <- dataset %>%
  group_by(group) %>%
  summarize(TotItemsYear = n(), .groups = "drop")

# 合并数据并计算比率
abc <- monthly_data %>%
  left_join(yearly_data, by = "group") %>%
  mutate(ratio = TotItemsMonth / TotItemsYear)

核心逻辑:全年总量是group级别的统计,必须先在group分组下计算,再传递到group+month的分组中,不能直接在group+month的分组里获取全年维度的统计值。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:10:32