如何用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
相关产品推荐
相关产品推荐

