【发布时间】:2021-05-10 14:12:00
【问题描述】:
我有两个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 的行,其中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 package (v1.0.0) 于 2021 年 2 月 6 日创建
【问题讨论】:
标签: r join data.table