R语言条件替换列值:保留Dict为C的行不变的实现问题
问题解答:根据Dict列条件保留或修改DataFrame的A/B列值
问题说明
现有包含A、B、Dict三列的DataFrame,Dict列的取值规则如下:
- "A"或"B":该行的有效值需归属到对应列,另一列置0(有效值为A+B的和)
- "C":该行的A、B列值保持原样不变
示例输入
A B Dict 0 123 B 0 123 A 123 0 A 123 0 C 0 123 C
期望输出
A B Dict 0 123 B 123 0 A 123 0 A 123 0 C 0 123 C
现有代码问题
当前使用的代码会把Dict为"C"的行的A、B列都置为0,不符合需求:
df %>% mutate(across(A:B, ~ ifelse(Dict == cur_column(), A+B, 0)))
修改后的解决方案
在ifelse逻辑中增加一层判断,当Dict为"C"时直接保留原列值即可:
df %>% mutate(across(A:B, ~ ifelse(Dict == "C", ., ifelse(Dict == cur_column(), A+B, 0))))
代码逻辑说明
- 优先判断
Dict == "C":如果是C,直接返回当前列的原始值(.代表当前处理的列) - 非C的行沿用原逻辑:当前列名与Dict值一致时,赋值为A+B的和;否则置0
内容的提问来源于stack exchange,提问作者Linda
相关产品推荐
相关产品推荐

