如何在Tidyverse中过滤掉指定列全为NA的分组
移除分组中某列全为NA的组
先看你的数据:
tibble( A = c("A","A","B","B"), x = c(NA,NA,NA,1), y = c(1,2,3,4), ) %>% group_by(A) -> df
你想要保留x列至少有一个非NA值的分组(比如B组),去掉x全是NA的分组(比如A组)。之前用all(!is.na(x))不对,因为这个条件要求分组里所有x都不能是NA才会保留,刚好和你要的逻辑相反。
把all换成any就对了,代码如下:
df %>% filter(any(!is.na(x)))
运行后得到的结果就是你要的:
tibble( A = c("B","B"), x = c(NA,1), y = c(3,4), )
简单说,any(!is.na(x))的作用是检查当前分组里是否存在至少一个x不是NA的行,只要满足这个条件,整个分组的所有行都会被保留,正好符合你的需求。
内容的提问来源于stack exchange,提问作者GiulioGCantone
相关产品推荐
相关产品推荐

