r - apply() 查找 2 个向量中最接近的值

标签 r vector apply

我有两个向量,我需要编写一段代码来查找第二个向量中最接近第一个向量的值的值的位置。我还需要它具有相当高的计算效率,因为数据集很大,所以我试图避免循环。

 v1 <- c(-.2, -.5, -.12, -.8, -.04, -.9, -.2, -.77, -.3, -.01)
 v2 <- c(-.015, -.06, -.12, -.2, -.3, -.4, -.52, -.65, -.78, -.92)

我想要一个代码来遍历第一个向量中的值并告诉我 v2 中哪个值最接近它们,所以我想回答为:

 > answer <- 4, 7, 3, 9, 2, 10, 4, 9, 5, 1

我知道我可以使用第一个向量和which.min 的循环,如下所示:

 for(i in 1:length(v1){
 answer[i] <- (which.min(abs(v1[i] - v2)))
 }

这给了我正确的答案,但我只是想要一个更好/更快的方法来做到这一点。我认为有一种方法可以使用 sapply() 来实现此目的,但我已经研究它太久了并且让自己感到困惑。任何建议表示赞赏。

最佳答案

使用sapply,选项是

sapply(v1, function(x) which.min(abs(v2 - x)))
#[1]  4  7  3  9  2 10  4  9  5  1

或与外部

max.col(-abs(outer(v1, v2, `-`)), 'first')
#[1]  4  7  3  9  2 10  4  9  5  1

或者使用findInterval

i1 <- order(v1)
findInterval(v2, v1[i1])[i1]

关于r - apply() 查找 2 个向量中最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56470635/

相关文章:

dataframe - 如何在 Rust 中将函数应用于 polars DataFrame 的多列

R ID 列匹配行号

r - R中excel "fdist"函数的等效函数是什么?

r - 通过行名和列名而不是数字来访问值

c++ - 在 C++ 中处理指针和 vector

python - Pandas:列和索引之间的多索引应用功能

r - 基于 "references describing the methods in your package"的 CRAN 拒绝

c++ - 在基于范围的 for 循环中从 std::vector<Object> 获取指向对象的指针

R,迭代矩阵的行向量

python - 使用条件逻辑并根据列是否存在创建新列