【问题标题】:filter_all for !is.na() in R still yields missing valuesR 中 !is.na() 的 filter_all 仍然会产生缺失值
【发布时间】:2019-08-05 23:27:01
【问题描述】:

我正在尝试使用 dplyr 的 filter_all() 来生成所有 没有 有任何缺失数据的行。我正在使用 dplyr 内置的星球大战数据集。当我使用此代码生成 确实 有任何缺失值时,它可以无缝运行:

 library(dplyr)
 data("starwars")

rows_with_NAs <- starwars %>%
  filter_all(any_vars(is.na(.)))

但是,如果我尝试使用此代码查找 not 缺少任何值的行:

rows_without_NAs <- starwars %>%
  filter_all(any_vars(!is.na(.)))

我仍然得到带有 NA 的行。

head(rows_without_NAs)

为什么会这样,我该如何解决?

谢谢!

【问题讨论】:

  • 您正在寻找任何具有不缺失值的变量。我认为您想将否定移到外面-!any_vars(is.na(.))
  • @thelatemail,当我尝试这样做时,我收到以下错误消息: is_quosure(e2) 中的错误:缺少参数“e2”,没有默认值。如果你能够让它工作,你能把你的语法发给我吗?谢谢!

标签: r filter dplyr filtering na


【解决方案1】:

tidyr 对此有 drop_na() 运算符。

library(tidyverse)

data("starwars")

rows_without_NAs <- starwars %>%
    drop_na()

【讨论】:

  • 我不知道这个功能!对于任何未来寻求此解决方案的人来说,一个小的修正是 drop_na() 是在 tidyr 中,而不是 dplyr,但它的工作原理都是一样的。谢谢@Simon Woodward!
  • 现在编程的一个特点是,有这么多的库,可能有一些东西可以做你想做的事,但通常很难找到。
猜你喜欢
  • 1970-01-01
  • 2017-09-17
  • 2012-09-01
  • 1970-01-01
  • 2019-04-24
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多