如何带容差筛选R语言数据框中符合行值条件的行?
R语言带容差筛选数据框中接近指定值的行
首先定义数据框:
df <- data.frame(x = c(6.00001, 6.00000, 5.99999, 5, 2), y = c(1, 2, 3, 4, 5))
数据框内容:
x y 1 6.00001 1 2 6.00000 2 3 5.99999 3 4 5.00000 4 5 2.00000 5
使用精确匹配可以筛选出x等于6的行:
df[df$x == 6,]
结果:
x y 2 6 2
但尝试用all.equal()做带容差的筛选时,会得到无效结果:
df[all.equal(df$x, 6, 0.0001), ]
输出:
x y NA NA NA
可行的简洁方法
1. 基于绝对值差的基础方法
直接计算x与目标值6的绝对值差,判断是否小于设定的容差(这里是0.0001):
df[abs(df$x - 6) < 0.0001, ]
运行后得到预期结果:
x y 1 6.00001 1 2 6.00000 2 3 5.99999 3
2. 使用dplyr的near()函数
如果使用tidyverse生态的工具,dplyr提供的near()函数专门用于浮点数的近似相等判断,可自定义容差:
library(dplyr) df %>% filter(near(x, 6, tol = 0.0001))
执行后同样能得到目标输出。
补充说明
all.equal()不适用的原因是:它返回的是单个逻辑值(当所有元素都满足近似相等时)或描述差异的字符串,而不是与原向量长度一致的逻辑向量,因此无法直接用于行索引筛选。
内容的提问来源于stack exchange,提问作者Tianjian Qin
相关产品推荐
相关产品推荐

