dplyr的slice_min为何with_ties=FALSE返回NA而with_ties=TRUE不返回
dplyr的slice_min函数with_ties参数差异原因说明
这是dplyr的刻意设计逻辑,并非函数BUG,差异来源于两种参数下的筛选规则区别,以及R语言默认的NA值排序特性:
- R语言默认排序规则中,
NA值会被判定为大于所有有效数值,且NA和任何值做等值、大小比较的结果都是NA。
with_ties = TRUE时的筛选逻辑
slice_min在该参数下会筛选分组内数值严格等于最小值的行:
对于c分组,唯一的b列值为NA,无法通过比较判定它等于分组的最小值,所以该分组没有符合条件的行,会被直接过滤。
with_ties = FALSE时的筛选逻辑
slice_min在该参数下会先对分组内的行按排序规则排序,直接取前N行(默认N=1),不需要校验数值是否严格等于最小值:
c分组只有1行,排序后第一行就是该NA行,因此会被保留。
如果需要两种参数下行为统一,可以显式添加na_rm = TRUE参数,此时两种情况都会过滤掉没有有效值的c分组。
内容的提问来源于stack exchange,提问作者aldorado
相关产品推荐
相关产品推荐

