如何在R中为向量各元素查找同向量中排除自身的最近值?
在R中实现向量元素排除自身后的最近值查找
构造示例数据
先还原你提供的示例数据框:
A <- data.frame(column_1 = c(1, 5, 6, 2, 3, 0, 5, 2, 1, 9))
核心实现代码
通过遍历每个元素的索引,排除当前元素后计算最近值:
# 遍历每个元素位置,计算排除自身后的最近值 A$column_2 <- lapply(seq_along(A$column_1), function(i) { # 提取排除当前元素的剩余向量 remaining_vals <- A$column_1[-i] # 计算当前元素与剩余元素的绝对差值 abs_diffs <- abs(A$column_1[i] - remaining_vals) # 找到最小差值对应的元素 remaining_vals[which.min(abs_diffs)] }) |> unlist()
如果习惯用purrr包,代码可以更简洁:
library(purrr) A$column_2 <- map_dbl(seq_along(A$column_1), ~{ remaining_vals <- A$column_1[-.] remaining_vals[which.min(abs(A$column_1[.] - remaining_vals))] })
验证结果
运行代码后查看数据框A,结果与你期望的一致:
column_1 column_2 1 1 1 2 5 5 3 6 5 4 2 2 5 3 2 6 0 1 7 5 5 8 2 2 9 1 1 10 9 6
代码说明
seq_along(A$column_1)生成每个元素的索引,逐个处理每一行A$column_1[-i]排除当前行的元素,得到剩余所有值的向量which.min(abs_diffs)找到绝对差值最小的位置,对应剩余向量中的值就是最近值- 当存在多个相同最小差值的元素时(比如示例中的2),
which.min会返回第一个出现的匹配项,符合需求
内容的提问来源于stack exchange,提问作者eades
相关产品推荐
相关产品推荐

