【问题标题】:How to filter data without losing NA rows using dplyr如何使用 dplyr 在不丢失 NA 行的情况下过滤数据
【发布时间】:2018-03-04 20:13:57
【问题描述】:

How to subset data in R without losing NA rows?

上面的帖子子集使用逻辑索引。 有没有办法在 dplyr 中做到这一点?

另外,dplyr 何时自动删除 NA? 根据我的经验,当我过滤掉特定字符串时,它会删除 NA,例如:

b = a %>% filter(col != "str")

我认为这不会排除 NA 值,但确实如此。但是当我使用其他格式的过滤时,它不会自动排除NA,例如:

b = a %>% filter(!grepl("str", col))

我想了解过滤器的这个功能。我将不胜感激任何帮助。谢谢!

【问题讨论】:

    标签: r filter dplyr


    【解决方案1】:

    如果您想保留由过滤条件创建的 NA,您只需使用 tidyr 中的replace_na 将条件 NA 转换为 TRUE。

    a <- data.frame(col = c("hello", NA, "str"))
    a %>% filter((col != "str") %>% replace_na(TRUE))
    

    【讨论】:

      【解决方案2】:

      dplyr::filter 的文档说...“与基本子集不同,条件评估为 NA 的行将被删除。”

      NA != "str" 的计算结果为 NA,因此被 filter 删除。

      !grepl("str", NA) 返回TRUE,因此保留。

      如果你想让filter 保留NA,你可以这样做filter(is.na(col)|col!="str")

      【讨论】:

      • 这个解决方案不会,因为如果 col != "str" 返回 FALSE 但 is.na(col) 返回 TRUE,它将被保留。所以过滤器失败了。我实际上在一个过滤器中使用了两个过滤器示例。所以它是 b = a %>% filter(col != "str1", !grepl("str2", col))。这就是我所做的,但它也过滤掉了 NA ......这就是问题
      猜你喜欢
      • 2023-02-10
      • 2023-03-08
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      相关资源
      最近更新 更多