如何筛选完整区间数值,避免%between%仅返回部分区间匹配结果
R 区间筛选边界覆盖不全问题解决方案
你遇到的筛选范围不全的问题,主要来自两处写法错误:
- 区间边界传入了字符串格式的
"1"、"90",如果DaysInMilk字段本身是数值类型,类型不匹配触发的隐式转换会导致比较逻辑异常,这是筛选结果缺漏的最常见原因 - 不同扩展包的
%between%算子实现逻辑可能存在差异,部分旧版本的第三方包实现可能存在边界匹配的隐性规则,不容易排查
修复方案
你可以选择下面任意一种写法,都可以保证覆盖1-90的完整闭区间:
- 调整参数类型使用原生
%between%
# 确保边界为数值类型,data.table/dplyr的between默认均为闭区间 filter(DaysInMilk %between% c(1, 90))
- 用基础逻辑运算符实现,无第三方包依赖,逻辑最明确
# 直接写大小比较,完全自主控制边界是否包含 filter(DaysInMilk >= 1 & DaysInMilk <= 90)
结果验证
筛选完成后可以运行下面的代码,确认结果的区间范围符合预期:
range(筛选后数据框$DaysInMilk)
运行后返回的结果第一个值为1、第二个值为90就代表筛选范围正确。
内容的提问来源于stack exchange,提问作者Swart205
相关产品推荐
相关产品推荐

