如何在R语言中仅显示含NA值的判定向量中结果为TRUE的行
解决方法:仅保留判定为TRUE的行
这问题我碰到过,不用修改你的complicated_criterium函数,有两个非常简便的实现方式:
方法1:用which()提取TRUE的索引
which()函数会自动忽略逻辑向量里的NA值,只返回结果为TRUE的元素位置,用它来筛选行就不会出现NA行:
example_data <- data.frame(num=1:5, let=letters[1:5]) complicated_criterium <- function(data) { c(T, NA, F, T, F)} # 用which()筛选 example_data[which(complicated_criterium(example_data)), ]
执行后就能得到你要的结果:
num let 1 1 a 4 4 d
方法2:用%in% TRUE匹配逻辑值
%in%运算符在匹配时会自动排除NA,因为NA不等于任何值(包括它自己),所以用这个方式也能精准筛选出TRUE的行:
example_data[complicated_criterium(example_data) %in% TRUE, ]
这个写法更简洁,效果和上面完全一致。
为什么之前的方法没生效?
你提到用is.na组合得到NA,是因为在R里,NA和任何逻辑值做运算结果都是NA;而na.omit会直接删除所有含NA的行,但这里的NA是筛选向量里的,不是数据框本身的NA,所以会导致索引不匹配,自然拿不到正确的行。上面两个方法刚好避开了这个问题,完美适配你的需求。
内容的提问来源于stack exchange,提问作者quarague
相关产品推荐
相关产品推荐

