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

如何在R中基于OR和AND逻辑生成仅识别疼痛/肿胀的二值新列

原有代码问题梳理

  1. 逻辑运算符优先级错误:|(或)的优先级低于&(且),未将「Pain或Swelling为1」的条件用括号包裹,导致实际判断逻辑完全不符合需求
  2. 语法错误:判断df$Nausea是否为0时误用了赋值符=而非相等判断符==;最后一个判断条件后多了冗余的&符号
  3. 逻辑遗漏:未将None字段加入判断,规则要求除Pain、Swelling外所有字段都为0,None字段也需要满足取值为0的条件

修正后代码

直接修改原有写法的版本

df$OnlyPainOrSwelling <- 1L * (
  # 先把Pain或Swelling为1的条件用括号包裹,保证逻辑优先级正确
  (df$Pain == 1 | df$Swelling == 1) &
    df$None == 0 &
    df$Tiredness == 0 &
    df$Headache == 0 &
    df$Nausea == 0 &
    df$Malaise == 0 &
    df$Lymph == 0
)

更简洁的通用写法(适用于字段多的场景)

通过行求和直接判断除目标字段外其余字段是否全为0,无需逐个写判断条件:

# 计算除Pain、Swelling外所有字段的行和,行和为0说明其余字段全为0
other_symptoms_sum <- rowSums(df[, setdiff(colnames(df), c("Pain", "Swelling"))])
# 同时满足两个条件则赋值为1,否则为0
df$OnlyPainOrSwelling <- 1L * (other_symptoms_sum == 0 & (df$Pain == 1 | df$Swelling == 1))

样例数据运行结果

用你提供的6行样例数据运行后,新列OnlyPainOrSwelling的取值依次为0,1,0,0,0,0,完全符合需求规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:51:03