如何过滤包含 NA 的行?

maR*_*vin 7 r dataframe

如果 x 或 y 是 NA,我想保留包含 NA 的行并丢弃 x 和 y 都不是 NA 的行。我尝试过dplyr::filter()purrr::keep()以及更多,但没有任何效果。必须有条件地执行此操作,而不是按行号执行此操作,因为我的数据集太大了。

library(tibble, quietly = T, warn.conflicts = F)
library(dplyr, quietly = T, warn.conflicts = F)

df <- tribble(
  ~name, ~x, ~y, 
  "id_1", 1, NA,
  "id_2", 3, NA,
  "id_3", NA, 29,
  "id_4", -99, 0,
  "id_5", -98, 28,
) %>%
  mutate(name = factor(name))

df
#> # A tibble: 5 x 3
#>   name      x     y
#>   <fct> <dbl> <dbl>
#> 1 id_1      1    NA
#> 2 id_2      3    NA
#> 3 id_3     NA    29
#> 4 id_4    -99    0
#> 5 id_5    -98    28
Run Code Online (Sandbox Code Playgroud)

创建于 2022 年 11 月 21 日,使用reprex v2.0.2

目标是保留第 1 到第 3 行。

MrF*_*ick 12

您可以使用filter()withif_any来过滤具有 NA 值的行。例如

df %>% filter(if_any(everything(), is.na))
Run Code Online (Sandbox Code Playgroud)

如果您只想使用一系列列而不是全部,您可以使用

df %>% filter(if_any(c(x, y), is.na))
df %>% filter(if_any(x:y, is.na))
df %>% filter(if_any(-name, is.na))
Run Code Online (Sandbox Code Playgroud)

例如

  • 请注意,除非确实需要,否则建议不要使用名称以“.”开头的设置参数名称。通常没有它读起来会更好。 (2认同)