在多列上使用 any() 或 all() 与 is.na()

Joe*_*Joe 2 r

我想从数据集中删除全部为 NA 的行(也称为保留具有任何非 NA 的行)作为列列表。我如何更新此代码以便x&y作为向量提供?这将使我能够灵活地添加和删除列以进行检查。

library(dplyr)

ds <- 
  tibble(
  id = c(1:4),
    x = c(NA, 1, NA, 4),
    y = c(NA, NA , 3, 4)
  ) 

ds %>%
  rowwise() %>%
  filter(
    any(
      !is.na(x),
      !is.na(y)
    ) 
  ) %>% 
  ungroup()
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写类似的内容any(!is.na(c(x,y))),但我不确定如何向is.na().

akr*_*run 7

我们可以filter_at使用any_vars

\n
ds %>% \n   filter_at(vars(x:y), any_vars(!is.na(.)))\n# A tibble: 3 x 3\n#     id     x     y\n#  <int> <dbl> <dbl>\n#1     2     1    NA\n#2     3    NA     3\n#3     4     4     4\n
Run Code Online (Sandbox Code Playgroud)\n
\n

-更新 - 2022 年 2 月 7 日

\n

在新版本中dplyr(如@GitHunter0建议)可以使用if_all/if_anyacross

\n
ds %>%\n    filter(if_any(x:y, complete.cases))\n# A tibble: 3 \xc3\x97 3\n     id     x     y\n  <int> <dbl> <dbl>\n1     2     1    NA\n2     3    NA     3\n3     4     4     4\n
Run Code Online (Sandbox Code Playgroud)\n