我有两个不同长度的数据帧(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 函数,但是似乎只能逐行比较它。任何帮助将不胜感激!
答案 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