R中筛选数据框行时保留缺失值的问题及解决方法
解决R数据框筛选问题:保留E<0和NA的行
你的代码中判断NA的方式错误——R里的NA是缺失值,不是字符串"NA",用dd_sub$E == "NA"永远得不到TRUE,再加上which()会自动忽略NA值,导致这个条件完全没生效,最终只筛选出了E<0的行。
下面是几种正确的实现方式:
基础R写法
直接用逻辑索引结合is.na()判断缺失值,这是最直接的方式:
dd_subset <- dd_sub[dd_sub$E < 0 | is.na(dd_sub$E), ]
如果一定要用which(),修正判断逻辑即可:
dd_subset <- dd_sub[which(dd_sub$E < 0 | is.na(dd_sub$E)), ]
(注:基础R中行索引可以直接用逻辑向量,which()不是必须的)
tidyverse/dplyr风格写法
如果习惯用tidyverse工具,代码可读性更强:
library(dplyr) dd_subset <- dd_sub %>% filter(E < 0 | is.na(E))
反向筛选思路
也可以通过排除E>0的行来达到目的,逻辑上更直观:
# 排除所有明确大于0的行,保留NA和小于0的行 dd_subset <- dd_sub[!(dd_sub$E > 0 & !is.na(dd_sub$E)), ]
内容的提问来源于stack exchange,提问作者zorals
相关产品推荐
相关产品推荐

