代码之家  ›  专栏  ›  技术社区  ›  DeltaIV

按变量分组并查找缺少某些变量的事例

  •  0
  • DeltaIV  · 技术社区  · 6 年前

    示例数据框:

    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 (和 当然)完全不见了。在这种情况下,这些将是级别 B E .

    解决方案应该使用 dplyr (如有可能)。如果需要选择列,请不要 select 只有列 x ,请 y z ,而是取消选择不想检查的列,例如 月份名称 .这是因为在实际的用例中,我有几十个变量必须检查是否有遗漏,只有几个变量我不想检查:当然,在这个示例中,为了简单起见,我只使用了三个变量。

    1 回复  |  直到 6 年前
        1
  •  2
  •   akrun    6 年前

    filter_at 在按“group”分组以子集行之后

    foobar %>%
       group_by(group) %>% 
       filter_at(vars(x, y, z) , all_vars(all(is.na(.))))
    

    如果目的是获得另一个“组”,则否定 filter

    foobar %>% 
      group_by(group) %>% 
      filter_at(vars(x, y, z) , all_vars(!all(is.na(.))))