如何无需循环基于单行计算值为R数据集新增Residual列?
解决方案
你可以通过先提取Loc==1时的基准值,再将其广播到所有行来实现无循环计算,具体代码如下:
方法1:分步实现
先单独计算基准值,再在管道中引用:
# 提取Loc=1时的基准值 base_val <- data %>% filter(Loc == 1) %>% pull(pmin(XD_VD + SE, val)) # 计算Residual列 data2 <- data %>% mutate(Residual = case_when( Loc == 1 ~ pmin(XD_VD + SE, val), TRUE ~ pmin(base_val + SE, val) ))
方法2:单管道连贯实现
无需单独创建变量,在同一个管道内完成:
data2 <- data %>% # 生成广播到所有行的基准值列 mutate(base_val = pmin(XD_VD + SE, val)[Loc == 1]) %>% # 计算目标Residual列 mutate(Residual = case_when( Loc == 1 ~ base_val, TRUE ~ pmin(base_val + SE, val) )) %>% # 删除临时基准列 select(-base_val)
结果验证
针对你提供的数据片段,计算后Residual列的结果为:29, 29.77, 29.77, 29.77, 29.77,完全符合需求逻辑。
内容的提问来源于stack exchange,提问作者ksinva
相关产品推荐
相关产品推荐

