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

如何用dplyr按列内与跨列条件过滤问卷响应数据?

解决方案

首先明确需求逻辑:

  • 第一步:移除所有col1为NA的行
  • 第二步:col1为"Yes"的行,必须保证其他列(col2、col3)全部无NA才保留;col1为"No"的行,无论其他列是否有NA都保留

你之前的尝试问题在于:

  • 错误使用!is.na(.),这是检查整个数据框而非当前行的其他列是否存在NA
  • 条件逻辑组合混乱,没有区分col1为"Yes"和"No"的不同保留规则

用dplyr可以这样实现:

library(dplyr)

# 按需求过滤数据
filtered_dataset <- dataset %>%
  filter(
    # 第一步:移除col1为NA的行
    !is.na(col1),
    # 第二步:满足任一条件则保留
    (col1 == "No") | 
    (col1 == "Yes" & across(col2:col3, ~!is.na(.x)))
  )

filtered_dataset

运行结果与你的期望一致:

col1 col2 col3
1  Yes  Yes   No
2   No   No   No
3   No <NA> <NA>

关键要点说明

  • across(col2:col3, ~!is.na(.x)) 批量检查col2到col3的所有列是否无NA,&会确保这些列全部满足非NA时才返回TRUE
  • 拆分条件逻辑:先过滤col1的NA行,再针对col1的不同值设置保留规则,避免逻辑混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:05:26