如何基于其他列条件在R语言数据框中生成新列total_payment
基于条件创建R语言数据框新列
原始数据框
test <- data.frame( ID = c(1001,1002,1003, 1004), b_done = c('Y', 'Y', 'Y', 'Y'), dd_complete = c(12, 19, 0, 8), dd_payment = c(12,20,0,12) )
需求说明
需要为上述数据框创建新列total_payment,规则如下:
- 当
b_done为'Y'且dd_complete大于0时,total_payment等于5 + dd_payment - 当
b_done为'Y'且dd_complete等于0时,total_payment为0
实现方法
方法一:基础R的ifelse()函数
如果数据中所有b_done的值都是'Y',可以直接简化判断:
test$total_payment <- ifelse(test$dd_complete > 0, 5 + test$dd_payment, 0)
如果存在b_done不为'Y'的情况,保留完整条件判断:
test$total_payment <- ifelse(test$b_done == 'Y' & test$dd_complete > 0, 5 + test$dd_payment, ifelse(test$b_done == 'Y' & test$dd_complete == 0, 0, NA)) # 其他情况设为NA,可根据需求调整
方法二:使用dplyr包的case_when()
适合多条件场景,代码可读性更强:
library(dplyr) test <- test %>% mutate(total_payment = case_when( b_done == 'Y' & dd_complete > 0 ~ 5 + dd_payment, b_done == 'Y' & dd_complete == 0 ~ 0, TRUE ~ NA_real_ # 处理未覆盖的其他情况 ))
期望输出
test <- data.frame( ID = c(1001,1002,1003, 1004), b_done = c('Y', 'Y', 'Y', 'Y'), dd_complete = c(12, 19, 0, 8), dd_payment = c(12,20,0,12), total_payment = c(17, 25, 0, 17) )
内容的提问来源于stack exchange,提问作者jo_
相关产品推荐
相关产品推荐

