You need to enable JavaScript to run this app. R语言dplyr中case_when实现跨组条件赋值的方法
优惠活动
大模型
产品
解决方案
定价
更多

R语言dplyr中case_when实现跨组条件赋值的方法

错误根源

原代码执行group_by(x)后分组状态会持续留存,后续操作始终处于按x拆分的分组上下文,每个分组内仅能访问本组数据,无法跨组提取b组的累计计算结果。

正确实现代码
library(dplyr)
df %>%
  # 1. 计算b组y列累计和,非b组保留原始值
  mutate(y = case_when(
    x == "b" ~ cumsum(y * (x == "b")),
    TRUE ~ y
  )) %>%
  # 2. 提取b组累计结果的最后值,赋值给所有a组行
  mutate(y = case_when(
    x == "a" ~ last(y[x == "b"]),
    TRUE ~ y
  ))
执行结果
x     y
1  a    15
2  a    15
3  a    15
4  b     4
5  b     9
6  b    15
7  c     7
8  c     8
9  c     9
10 a    15
11 a    15
12 a    15
逻辑说明
  • 通过y * (x == "b")将非b组的y值置0,计算全列累计和时仅b组数值参与累加,再通过case_when把b组的y值替换为对应累计结果,其余组保留原始值
  • 第二步取消分组状态,在全量数据上下文中直接筛选b组的y值,取最后一个值赋给所有a组的行,c组保持原值不变,完全匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 16:15:09