如我构造的数据,c 组存在缺失值,如何把整个 c 组都删掉(3行)?

data <- 
  tibble(x = rep(c("a", "b", "c"), 3), 
         y = c(1:8, NA)) %>% 
  arrange(x)

目前想到的方法是

data %>% 
  group_by(x) %>% 
  summarise(Not_NA = ifelse(any(is.na(y)), NA, TRUE)) %>% 
  drop_na() %>% 
  inner_join(data, by = "x") %>% 
  select(-Not_NA)

不知道有没有更简单的方法。

 data %>% 
    group_by(x) %>% 
    mutate(na_indicator = any(is.na(y))) %>% 
    ungroup(x) %>% 
    filter(!na_indicator)

mutate直接在原数据里加一列,如果这一组有NA,这一组的赋值都是TRUE。不过代码整体似乎并不简化多少……

    baseR 的解决方案

    data[!data$x %in% data[is.na(data$y), ]$x, ]

    大家的方法确实比我的简单得多,学到了学到了

    data.table 的解决方案

    library(data.table)
    data <- data.table(x = rep(c("a", "b", "c"), 3),
                       y = c(1:8, NA))
    data<-data[order(x),]
    data[,y[!anyNA(y)],by=x]
    24 天 后