按变量分组并查找某些变量都缺失的情况

时间:2018-06-17 13:14:20

标签: r dplyr na

示例数据框:

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之外的所有变量)完全缺失。在这种情况下,这些级别为Edplyr

解决方案应使用select(如果可能)。如果您需要选择列,请不要x只列yzgroup,而是取消选择您不想检查的列,例如month_name和{{1}}。这是因为在实际使用案例中,我有几十个必须检查缺失的变量,只有一些我不想检查的变量:当然在示例中我只使用了三个变量来简化。

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(.))))