r - 在 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 | 不适用 |
解决方案
不是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
推荐阅读
- c++ - 发布的结果与调试的结果不同
- mongodb - 如何允许分配不兼容的 Typescript 类型?
- c++ - 我的值在我的设置函数中没有改变
- python-3.x - 是否可以在 unit_test 期间模拟/伪造 python 函数中的变量
- clojure - 在宏中使用循环
- python - AttributeError:模块'matplotlib.cbook'没有属性'iterable'
- javascript - Google 脚本:比较 If 语句中的变量
- google-api - 如何使用 Google Drive API (node.js) 创建共享驱动器
- flutter - 如果溢出,则包装 Row 小部件的内容
- python-3.x - 在 python 中为 MCA 和 FAMD 使用 Prince 库