使用容差将R数据帧过滤为另一个数据帧?

时间:2020-04-07 23:40:59

标签: r dplyr

我有两个不同长度的数据帧(A和B)。对于A中的给定值,我想知道B中是否有在+/- 0.3公差范围内的值。知道此值在B中的位置也将很有用。

A<-c(1:10)
B<-c(2.2,15,1.8,4.9,20,14,8.2,33,9.8,41,16)

即,对于A [1],公差范围内B中没有值,

但是对于A [2],B [1]和B [3]的值在公差范围内, 等等。

我已经在dplyr中尝试了 near 函数,但是似乎只能逐行比较它。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:3)

我们可以使用between

library(purrr)
map(A, ~  B[between(B, .x - 0.3, .x + 0.3)]) %>% 
     flatten_dbl

答案 1 :(得分:1)

这是一个主意。 result是一个列表。如果没有匹配项,则result中元素的长度为0。否则,result将在B中记录与要求匹配的索引。

A <- 1:10
B <- c(2.2,15,1.8,4.9,20,14,8.2,33,9.8,41,16)

difference <- list()

for (i in 1:length(A)){
  difference[[i]] <- B - A[i]
}

result <- lapply(difference, function(x) which(x < 0.3 & x > -0.3))

答案 2 :(得分:0)

在基数R中,我们可以使用sapply

unlist(sapply(A, function(x) B[B >= (x- 0.3) & B <= (x + 0.3)]))
#[1] 2.2 1.8 4.9 8.2 9.8