我有两个向量,让我们说:
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 ......
答案 0 :(得分:5)
如果您想要匹配最近的B
值,那么您可以使用which.min
与A
的每个元素的绝对距离:
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