r - 与 data.table 的多个匹配最近的滚动连接
问题描述
我有两个data.table
要基于两列合并。一个是完全匹配 ( station
),另一个是最接近的值 ( depth_m
)。
library(data.table)
df1 <- data.table(
station = "a",
depth_m = 1
)
df2 <- data.table(
station = c("a", "a", "b"),
depth_m = c(1.1, 1.1, 2),
wavelength = c(300, 350, 300),
bbp = c(0.0012, 0.0013, 0.0014)
)
df1
#> station depth_m
#> 1: a 1
df2
#> station depth_m wavelength bbp
#> 1: a 1.1 300 0.0012
#> 2: a 1.1 350 0.0013
#> 3: b 2.0 300 0.0014
为此,我使用roll = "nearest"
如下:
df2[df1, on = .(station, depth_m), roll = "nearest"]
#> station depth_m wavelength bbp
#> 1: a 1 300 0.0012
但是,我也会得到df2
where的行,wavelength == 350
所以结果是:
data.table(
station = c("a", "a"),
depth = c(1, 1),
wavelength = c(300, 305),
bbp = c(0.0012, 0.0013)
)
#> station depth wavelength bbp
#> 1: a 1 300 0.0012
#> 2: a 1 305 0.0013
因此,我尝试使用mult = "all"
没有成功:
df2[df1, on = .(station, depth_m), roll = "nearest", mult = "all"]
#> station depth_m wavelength bbp
#> 1: a 1 300 0.0012
任何帮助表示赞赏。
由reprex 包于 2021-02-06 创建(v1.0.0)
解决方案
理论上你应该可以使用mult = "all"
. 但是,关于这个主题有两个未解决的问题,这表明目前这不能按预期工作。在使用浮点数时,roll="nearest", mult="all" 错误地只给出了一个匹配项,建议使用解决方法,将连接列转换为整数,然后返回正确的行数。
在后续问题中,使用更高data.table
版本(Join on integers, roll = "nearest" and mult = "all" 错误地只给出一个匹配),解决方法不再有效。
推荐阅读
- c++ - 在 Visual Studio 上的 C++ 项目中将 NetCDF(通过 vcpkg 安装)与 CMake 一起使用时未解析的外部符号
- php - 在 Symfony 项目中包含 xml url 源的最佳方法
- php - 将表添加到数据库时如何插入手风琴
- javascript - 如何创建一个函数来搜索和创建一个json列表
- ruby-on-rails - 相同的表单返回不同的 CSRF 行为
- outlook - Outlook Graph 电子邮件 API:线程电子邮件对话
- android - 我的设置图标未显示在项目窗口中
- django - 在日志文件 django 中保存手动数据
- r - 翻译页面:R 中的 Selenium
- jquery - Jquery UI 对话框总是得到空的输入值