根据其他行中的 NA 值有条件地删除行

dd_*_*ata 0 r filter dataframe dplyr data-wrangling

我有一个像这样的数据框:

 city   year value
   <chr> <dbl> <dbl>
 1 la        1    NA
 2 la        2    NA
 3 la        3    NA
 4 la        4    20
 5 la        5    25
 6 nyc       1    18
 7 nyc       2    29
 8 nyc       3    24
 9 nyc       4    17
10 nyc       5    30
Run Code Online (Sandbox Code Playgroud)

我想删除所有没有完整 5 年数据的城市。因此,在本例中,尽管存在第 4 年和第 5 年的数据,但我想删除城市 la 的所有行,从而产生以下数据框:

 city   year value
  <chr> <dbl> <dbl>
1 nyc       1    18
2 nyc       2    29
3 nyc       3    24
4 nyc       4    17
5 nyc       5    30
Run Code Online (Sandbox Code Playgroud)

这可能吗?提前致谢。

Ony*_*mbu 6

在基础 R 中:

subset(df, !ave(value, city, FUN = anyNA))

   city year value
6   nyc    1    18
7   nyc    2    29
8   nyc    3    24
9   nyc    4    17
10  nyc    5    30
Run Code Online (Sandbox Code Playgroud)

在 Tidyverse 中

df %>%
  group_by(city) %>%
  filter(!anyNA(value))

# A tibble: 5 x 3
# Groups:   city [1]
  city   year value
  <chr> <int> <int>
1 nyc       1    18
2 nyc       2    29
3 nyc       3    24
4 nyc       4    17
5 nyc       5    30
Run Code Online (Sandbox Code Playgroud)

甚至

df %>%
   group_by(city) %>%
   filter(all(!is.na(value)))
Run Code Online (Sandbox Code Playgroud)