我需要通过一些数字列加入几个数据框。但是,在该过程的前一步中,列的精度混合了(例如,它们可能已被截断,或者保存了CSV并对其进行了四舍五入)。
有没有一种方法可以使连接以某种特定的精度发生?
我不能简单地四舍五入,因为它们可能仍然朝着不同的方向前进。
library(dplyr)
set.seed(123)
A <- tibble(X = 1:6, Y = runif(6))
B <- tibble(Z = 7:12, Y = A$Y + rnorm(6)/100)
inner_join(A, B, by = 'Y') # This results in no merge
答案 0 :(得分:1)
找到了一个不错的软件包fuzzyjoin
。
> fuzzyjoin::difference_inner_join(A, B,max_dist = 0.03)
Joining by: "Y"
# A tibble: 6 x 4
X Y.x Z Y.y
<int> <dbl> <int> <dbl>
1 1 0.288 7 0.288
2 2 0.788 8 0.790
3 3 0.409 9 0.426
4 4 0.883 10 0.888
5 5 0.940 11 0.928
6 6 0.0456 12 0.0387