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

R语言ifelse多条件(含布尔运算符)应用报错求助

修正R代码实现Discount列计算

我来帮你修正这段代码,先拆解下你原来代码里的几个问题:

  • ifelse参数错误:ifelse()函数只接受3个参数(判断条件、条件为真时的值、条件为假时的值),你多传了第4个参数Coupon,这就是报错的直接原因。
  • 逻辑判断写法错误:Coupon == "OFF10" | "LARGE10"这种写法不符合R的语法逻辑,R会把"LARGE10"当作逻辑值TRUE,导致所有行都会匹配第一个条件,正确的写法应该是判断Coupon是否属于指定的两个值。
  • 未处理NA值:你的数据样例里存在Coupon为NA的情况,原代码没有考虑这种场景,会导致对应行的Discount也变成NA。

推荐的修正代码(简洁易读版)

使用dplyr的case_when()函数,它适合处理多条件分支,代码更清晰:

library(dplyr)

# 新增Discount列
NewORdersData <- NewORdersData %>% 
  mutate(Discount = case_when(
    Coupon %in% c("OFF10", "LARGE10") ~ Sub_Total * 0.1,  # OFF10/LARGE10对应10%折扣
    Coupon == "OFF5" ~ Sub_Total * 0.05,                  # OFF5对应5%折扣
    TRUE ~ 0  # 处理NA或其他未提及的Coupon值,这里设为0,若要保留NA可替换为NA_real_
  ))

用ifelse实现的简洁版本

如果你更倾向于用ifelse(),可以嵌套使用:

library(dplyr)

NewORdersData <- NewORdersData %>% 
  mutate(Discount = ifelse(
    Coupon %in% c("OFF10", "LARGE10"),
    Sub_Total * 0.1,
    ifelse(Coupon == "OFF5", Sub_Total * 0.05, 0)
  ))

验证样例数据的结果

用你提供的前10行数据测试,修正后的代码会生成如下Discount值(以默认设0为例):
[2.798, 0, 7.494, 9.185, 8.082, 3.785, 4.88, 10.28, 0, 4.692]

内容的提问来源于stack exchange,提问作者Susan Mwansa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:37:37