通过不等长的 ID 查找最接近的值

Finding closest value by ID with unequal lengths

我有一个数据框和一个不等长的向量。他们不共享 id。

df <- data.frame( 
  id       = factor(rep(1:24, each = 10)),
  x        = runif(20)*100
                )

a <- sort(runif(100*100))

现在,我真的很想 运行 遍历数据框的每一行,并 在向量 (a) 中找到每个最接近对应值的位置id.

对于单个值,这只是。

which.min(abs(df[1, 2] - a))

所以,如果我这样做 "manually" 它将是:

a.location <- c(
    which.min(abs(df[1, 2] - a)) 
    which.min(abs(df[2, 2] - a)),
    ...., 
    which.min(abs(df[24, 2] - a)) 
)

但是当我无法合并数据框和向量时,我根本无法理解如何在函数中执行此操作。我查看了 mapply,但是对于不等长和 dplyr 中的 rowwise 并不顺利,但也没有太多运气。

您可以使用 data.table 包中的滚动连接

library(data.table)
setkey(setDT(df), x)
df1 <- data.table(x=a, id1=1:length(a))
setkey(df1, x)
df1[df, roll="nearest"]

id1 列将为您提供所需的结果。