在 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组中查找频繁项的最有效方法是啥[重复]