首页 > 解决方案 > 在 mutil 组中查找最接近的值

问题描述

我的数据1是

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

我的数据2是

id2 价值2
1 100
1 120
2 105
2 200
3 300

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

id1 价值1 价值2
1 98 100
1 101 100
1 118 100
1 170 120
2 95 105
2 201 200
3 160 300
4 70 不适用

标签: rgroup-by

解决方案


不是dplyr解决方案。但是 imhodata.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
      

推荐阅读