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

R语言mutate函数按相同月份分组求和after.tax实现方法

问题根因

你写的代码无法运行核心是两个语法逻辑错误:

  • case_when是逐行做条件匹配赋值的函数,内部不支持嵌入for循环逻辑
  • 同字段分组聚合不需要手动写循环遍历行,dplyr原生提供了分组计算能力,比手写循环效率高、出错概率低
正确实现方案

直接在你原有数据处理管道里加入分组计算逻辑即可,不需要额外写循环判断,完整代码如下:

income.raw <- income %>%
  select(month, category, occurrence) %>%
  mutate(
    total = case_when(
      category == ".hagwon" ~ occurrence * 17000 * 3,
      category == ".co" ~ occurrence * 30000 * 2
    ),
    before.tax = total,
    after.tax = total * 0.967
  ) %>%
  # 按month字段分组,后续计算会按同组聚合
  group_by(month) %>%
  # 分组状态下mutate会自动给同组所有行匹配上同组的求和结果
  mutate(monthly.total = sum(after.tax)) %>%
  # 计算完成后取消分组,避免后续其他数据处理操作受分组逻辑干扰
  ungroup()
结果说明

对应你提供的示例数据,计算结果完全符合预期:

  • month值为4的行,monthly.total取值为164225.61
  • month值为5的行,monthly.total取值为576096.51
  • month值为6的两行,monthly.total统一取值为508470 + 299100 = 807570

小提示:如果你的原始数据里after.tax字段存在空值(NA),求和时可以给sum加参数na.rm = TRUE,也就是写成sum(after.tax, na.rm = TRUE),避免空值导致整组汇总结果返回NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:03:27