在 mutil 组中查找最接近的值

Posted

技术标签:

【中文标题】在 mutil 组中查找最接近的值【英文标题】:Finding the closest values within mutil group 【发布时间】:2021-12-26 13:02:04 【问题描述】:

我的数据1是

id1 value1
1 98
1 101
1 118
1 170
2 95
2 201
3 160
4 70

我的数据2是

id2 value2
1 100
1 120
2 105
2 200
3 300

如何使用 group_by 或 mutate (dplyr) 从 data2$value2 创建结果列? 像这样的结果表

id1 value1 value2
1 98 100
1 101 100
1 118 100
1 170 120
2 95 105
2 201 200
3 160 300
4 70 NA

【问题讨论】:

【参考方案1】:

不是dplyr-解决方案。但恕我直言data.table 的滚动连接是此类任务的最佳实践。

library(data.table)
data1 <- fread("id1     value1
1   98
1   101
1   118
1   170
2   95
2   201
3   160
4   70")
data2 <- fread("id2     value2
1   100
1   120
2   105
2   200
3   300")

# alternatively, use:
# setDT(data1); setDT(data2)

# perform rolling join to nearest value with same id
data1[, value2 := data2[data1, x.value2, on = .(id2 = id1, value2 = value1), roll = "nearest"]][]
#    id1 value1 value2
# 1:   1     98    100
# 2:   1    101    100
# 3:   1    118    120
# 4:   1    170    120
# 5:   2     95    105
# 6:   2    201    200
# 7:   3    160    300
# 8:   4     70     NA
      

【讨论】:

完美运行!但我已经在我的其他数据中调整了您的代码并收到错误消息:Error: Check that is.data.table(DT) == TRUE. Otherwise, := and :=(...) are defined for use in j, once only and in particular ways. See help(":="). 怎么了?我的 R Studio 版本 1.4.1106 data.table 包版本 1.14.3 R 版本 4.0.5 你的数据是data.table吗? 啊,我忘了在我的数据上设置DT,现在它运行良好非常感谢。! ps.我是 data.frame 包的初学者 :) .

以上是关于在 mutil 组中查找最接近的值的主要内容,如果未能解决你的问题,请参考以下文章

在数组中查找匹配或最接近的值

通过聚合在pandas组中查找频繁项的最有效方法是啥[重复]

Excel - 在同一个列表中查找最接近的值

ios NSPredicate 在 NSDictionary 中查找最接近的值

二叉搜索树遍历 - 查找最接近的值

查找最接近未完全排序的列表中的值的项目的索引