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

如何在R的case_when函数中正确使用多个AND逻辑运算?

问题分析与解决

你的代码逻辑本身是成立的,但出现不符合预期的归类结果,大概率是以下原因导致,对应解决方案如下:

1. 检查数据类型是否异常

ScoreA或ScoreB如果是字符型/因子型而非数值型,会导致数值比较逻辑紊乱。比如字符型的"10"在某些场景下的比较结果会偏离预期,或含非数值字符(如"10分")会转为NA干扰判断。

先检查列类型:

str(df$ScoreA)
str(df$ScoreB)

如果不是数值型,先转换:

df <- df %>% 
  mutate(across(c(ScoreA, ScoreB), as.numeric))

2. 优化条件顺序(更严谨)

虽然你的条件逻辑互斥,但把ScoreB>=8的判断放在ScoreA<8 & ScoreB<8前面,能避免潜在的顺序误解,结果一致但更直观:

df <- df %>% 
  mutate(New_Var = case_when(
    age == 6 & ScoreA >= 8 ~ "Strong",
    age == 6 & ScoreB >= 8 ~ "Weak",
    age == 6 & ScoreA < 8 & ScoreB < 8 ~ "Some"
  ))

3. 验证目标样本的实际值

确认你说的age=6、ScoreA=4、ScoreB=10样本的真实数据是否符合描述,避免输入错误:

df %>% filter(age == 6, ScoreA == 4, ScoreB == 10)

另外,在tidyverse管道中建议直接用列名(如age而非df$age),更简洁且能避免分组操作时的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:01:33