【发布时间】:2021-02-22 21:48:22
【问题描述】:
当我根据某些条件对数据帧进行子集化时,我得到的结果是子集化条件 AND NA 行。
当我使用过滤器时,它只会给我过滤后的行。
所以子集我可能会得到 20 行(10 行和 10 NA 行)但是过滤,我得到 10 行(ALL Real)。
这是为什么?
【问题讨论】:
当我根据某些条件对数据帧进行子集化时,我得到的结果是子集化条件 AND NA 行。
当我使用过滤器时,它只会给我过滤后的行。
所以子集我可能会得到 20 行(10 行和 10 NA 行)但是过滤,我得到 10 行(ALL Real)。
这是为什么?
【问题讨论】:
这是?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))
【讨论】: