R:匹配相似的值

时间:2015-07-08 14:47:22

标签: r

我有两个向量,让我们说:

A <- c(13.25, 14.24, 15.29, 16.27, 17.31)

B <- c(10.1, 11.2, 12.1, 13.2, 14.1, 15.3, 16.2, 17.4, 18.3, ...)

我希望&#34;匹配&#34;第一个到第二个的值,获得相似值的位置。在这种情况下,我想获得

C <- c(4, 5, 6, 7, 8)

我尝试过匹配,但它不起作用。另外,我尝试将匹配应用于圆形向量,但问题是它并不总是有效:如果B包含14.48而C包含14.51,则它们分别舍入为14和15 ......

2 个答案:

答案 0 :(得分:5)

如果您想要匹配最近的B值,那么您可以使用which.minA的每个元素的绝对距离:

C <- sapply(A, function(x) which.min(abs(x-B)))
C
[1] 4 5 6 7 8

<强>更新

使用公差,您必须添加额外的步骤以将结果排除在范围之外:

tolerance <- 0.2
in_range <- unlist(sapply(A, function(x) x[any(abs(x-B) < tolerance)]))
C <- sapply(A, function(x) which.min(abs(x-B)))
C <- C[match(in_range, A)]

答案 1 :(得分:0)

我不知道你想要什么样的舍入,你可能正在寻找返回整数的trunc。至于功能,试试

which(trunc(B) %in% trunc(A))
# [1] 4 5 6 7 8