R语言数据框子集化:如何筛选指定值及缺失值的观测?
正确筛选Debrief_2为'1'或NA的观测方法
你的核心问题是把逻辑或(|)写成了逻辑与(&),一个值不可能同时等于'1'又是NA,所以之前的代码返回0条观测是必然的。另外对NA的判断和处理也有错误,下面是正确的解决方法:
基础R实现
直接用逻辑或(|)连接两个条件,无需用which(which会自动过滤NA对应的逻辑值,反而可能导致遗漏):
alldata3 <- alldata[alldata$Debrief_2 == '1' | is.na(alldata$Debrief_2), ]
tidyverse/dplyr实现(更直观)
如果你习惯用tidyverse工具链,filter函数的写法更清晰易懂:
library(dplyr) alldata3 <- alldata %>% filter(Debrief_2 == '1' | is.na(Debrief_2))
为什么之前的代码失败?
- 误用
&代替|:逻辑与要求两个条件同时满足,一个值不可能既是'1'又是NA,结果必然为空 alldata$Debrief_2 == 'is.na':NA是R中的缺失值类型,不是字符串"is.na",必须用is.na()函数判断which(alldata$Debrief_2 != '2', na.rm=TRUE):alldata$Debrief_2 != '2'对NA值返回NA,na.rm=TRUE会把这些NA的位置从which结果中剔除,因此只保留了'1'的观测,漏掉了NA
内容的提问来源于stack exchange,提问作者NessD
相关产品推荐
相关产品推荐

