按变量分组并查找某些变量全部缺失的案例

group by variable and find cases for which some variables are all missing

示例数据框:

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

解决方案应使用dplyr(如果可能)。如果您需要 select 列,请不要 selectxyz 列,而是删除 select 您需要的列不想查,比如groupmonth_name。这是因为在实际用例中我有几十个变量必须检查缺失,只有几个变量我不想检查:当然在这个例子中为了简单起见我只使用了三个变量。

我们可以在按 'group' 分组后使用 filter_at 对行

进行子集化
foobar %>%
   group_by(group) %>% 
   filter_at(vars(x, y, z) , all_vars(all(is.na(.))))

returns 'group' 为 'B' 或 'E'

的行

如果目的是得到其他'group's,取反filter

中的表达式
foobar %>% 
  group_by(group) %>% 
  filter_at(vars(x, y, z) , all_vars(!all(is.na(.))))