通过不等长的 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
列将为您提供所需的结果。
我有一个数据框和一个不等长的向量。他们不共享 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
列将为您提供所需的结果。