【问题标题】:Why does subsetting include NA rows but filter does not? [duplicate]为什么子集包含 NA 行但过滤器不包含? [复制]
【发布时间】:2021-02-22 21:48:22
【问题描述】:

当我根据某些条件对数据帧进行子集化时,我得到的结果是子集化条件 AND NA 行。

当我使用过滤器时,它只会给我过滤后的行。

所以子集我可能会得到 20 行(10 行和 10 NA 行)但是过滤,我得到 10 行(ALL Real)。

这是为什么?

【问题讨论】:

    标签: r subset


    【解决方案1】:

    这是?filter的文档中指定的行为

    filter() 函数用于对数据框进行子集化,保留满足您条件的所有行。要保留,该行必须为所有条件生成 TRUE 值。请注意,当条件评估为 NA 时,该行将被删除,这与带有 [.

    的基本子集不同

    主要原因是任何使用运算符==>< 的比较都会返回NA 如果元素是NA as

    NA > 5
    #[1] NA
    
    NA == 5
    #[1] NA
    

    但是,如果我们使用%in%,它会返回FALSE

    NA %in% 5
    #[1] FALSE
    

    所以,在filter 中,如果我们还需要返回NA 元素,请使用| 条件

    df1 %>%
      filter(col1 == 5|is.na(col1))
    

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 2020-08-12
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2011-01-01
      相关资源
      最近更新 更多