R语言如何按0.2步长从3到speed最大值筛选dataframe的行?
R语言按0.2步长自动筛选speed列解决方案
基础实现方案
你可以通过动态生成目标数值序列的方式替代手动罗列条件,适配不同最大值的数据集,代码如下:
library(dplyr) # 自动计算符合要求的speed上限值:取最大值向下对齐0.2步长 speed_max_upper <- floor(max(ASdata$speed, na.rm = TRUE) / 0.2) * 0.2 # 筛选符合步长要求的行 ASdata_only <- ASdata %>% filter(speed %in% seq(from = 3, to = speed_max_upper, by = 0.2))
浮点数精度优化方案
运动采集数据通常存在浮点数存储精度误差(如实际3.2可能被存储为3.1999999999),直接用相等匹配可能漏筛,可以改用近似匹配逻辑:
library(dplyr) speed_max_upper <- floor(max(ASdata$speed, na.rm = TRUE) / 0.2) * 0.2 ASdata_only <- ASdata %>% filter( # 验证speed对齐0.2步长的误差小于1e-6,可根据采集精度调整阈值 abs(speed - round(speed / 0.2) * 0.2) < 1e-6, speed >= 3, speed <= speed_max_upper )
逻辑说明
- 步长上限计算逻辑:将speed最大值除以0.2后向下取整,再乘以0.2,即可得到向下对齐0.2步长的最大筛选值,和你举例的10.3取10.2的要求完全匹配
na.rm = TRUE参数用于避免speed列存在缺失值时计算最大值报错,若确定数据集无缺失可移除- 近似匹配的误差阈值可以根据你的数据采集精度调整,普通运动GPS数据用1e-6即可覆盖所有精度误差
内容的提问来源于stack exchange,提问作者Jesús Olivares-Jabalera
相关产品推荐
相关产品推荐

