R语言如何基于条件使用mutate修改payment_amount字段值
R条件修改数据框列值问题解决方案
原有代码错误原因
- 执行
select(payment_amount)后,数据框仅剩余payment_amount一列,后续filter操作需要用到的payment_type列已被移除,会直接触发报错 filter操作仅会保留符合条件的行,将这部分远小于原数据行数的结果直接赋值给全量的df$payment_amount,会出现长度不匹配问题,要么直接报错要么出现数值错位- 需求是将目标值变为原来的5倍,代码中写的
*100属于逻辑错误,数值不符合需求
正确实现代码
使用dplyr的mutate搭配if_else即可实现需求,无需提前过滤数据:
library(dplyr) df <- df %>% mutate(payment_amount = if_else( condition = payment_type %in% c("tpt", "trt"), true = payment_amount * 5, false = payment_amount ))
如果后续需要扩展更多payment_type的修改规则,可以改用case_when写法,扩展性更强:
df <- df %>% mutate(payment_amount = case_when( payment_type %in% c("tpt", "trt") ~ payment_amount * 5, # 后续可新增其他条件,例:payment_type == "xxx" ~ payment_amount * 10 TRUE ~ payment_amount ))
内容的提问来源于stack exchange,提问作者hereforadoubt
相关产品推荐
相关产品推荐

