示例数据框:
library(dplyr)
n <- 5
k <- 10
my_labels <- LETTERS[1:5]
foobar <- data.frame(group = gl(n, k, labels = my_labels), x = runif(n*k), y=rnorm(n*k), z = rpois(n*k, 1), month_name = (rep(month.name[1:k], n)))
index <- sample(1:50,10)
foobar[index, c("x", "y", "z")] <- NA
foobar[foobar$group %in% c("B","E"), c("x", "y", "z")] <- NA
我想找到group
的所有级别,只有month_name
除了group
(和B
之外的所有变量)完全缺失。在这种情况下,这些级别为E
和dplyr
。
解决方案应使用select
(如果可能)。如果您需要选择列,请不要x
只列y
,z
和group
,而是取消选择您不想检查的列,例如month_name
和{{1}}。这是因为在实际使用案例中,我有几十个必须检查缺失的变量,只有一些我不想检查的变量:当然在示例中我只使用了三个变量来简化。
答案 0 :(得分:2)
我们可以在按'group'分组后使用filter_at
来对行进行分组
foobar %>%
group_by(group) %>%
filter_at(vars(x, y, z) , all_vars(all(is.na(.))))
返回'group'为'B'或'E'
的行如果打算获得另一个'组',则取消filter
中的表达
foobar %>%
group_by(group) %>%
filter_at(vars(x, y, z) , all_vars(!all(is.na(.))))