按组过滤两列无缺失值(NA)的数据失败,求解决方案
解决方法
要筛选出x分组后z1、z2两列均无缺失值的分组,你需要修正列的引用方式,确保is.na()作用于数据列而非列名字符串。
正确代码(支持动态列名)
如果需要用变量指定列名(比如你的columns向量),可以结合across()和all_of()来实现:
columns <- c("z1", "z2") df %>% group_by(x) %>% filter(all(across(all_of(columns), ~ !is.na(.x))))
固定列名的简化写法
如果列名固定,也可以直接分别检查每组的列是否全为非缺失值:
df %>% group_by(x) %>% filter(all(!is.na(z1)) & all(!is.na(z2)))
原代码失效原因
你之前的代码all(!is.na(!!columns))逻辑错误:!!columns只是把字符向量c("z1","z2")展开,is.na()检查的是这些字符串本身(而非数据框的对应列),自然无法正确判断分组内的缺失值情况。
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

