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

R语言case_when函数提取"no"响应失败问题排查

问题诊断

你的代码逻辑完全错误:case_when是顺序匹配,只要某一个症状等于"no"就会返回"NS",哪怕其他症状存在"yes",这直接导致筛选结果混入了有阳性症状的样本。另外TRUE分支的as.character用法无效,无法正确处理多个变量。

正确实现方案

目标是保留**所有已评估症状(非NA)全为"no"、且无任何"yes"**的样本,以下是两种可行的实现方式:

方式1:使用dplyr(推荐)

library(dplyr)

# 直接筛选目标子集,无需额外标记列
no_symptoms <- data %>%
  rowwise() %>%
  # 仅检查非NA的症状,确保全部为"no"
  filter(all(c_across(headache:diarrhea)[!is.na(c_across(headache:diarrhea))] == "no")) %>%
  ungroup()

如果需要保留标记列:

data <- data %>%
  rowwise() %>%
  mutate(no_symptoms = case_when(
    all(c_across(headache:diarrhea)[!is.na(c_across(headache:diarrhea))] == "no") ~ "NS",
    TRUE ~ "S"
  )) %>%
  ungroup()

no_symptoms <- data %>% filter(no_symptoms == "NS")

方式2:使用Base R

# 指定所有症状列
symptom_cols <- c("headache", "sickness", "coughing", "fatigue", "diarrhea")

# 逐行判断:非NA症状全为no,且无yes
no_symptoms <- data[apply(data[, symptom_cols], 1, function(x) {
  non_na_vals <- x[!is.na(x)]
  # 若没有任何评估记录(全NA),可根据需求调整返回值,这里默认排除
  length(non_na_vals) > 0 && all(non_na_vals == "no")
}), ]
核心逻辑说明
  • 必须整行综合判断,而非单个症状独立判断
  • 先过滤NA值,只关注被实际评估过的症状
  • 只要存在任意一个"yes",或者有非NA的症状不是"no",就排除该样本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:24:23