You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于其他列条件在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_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:21:50