如何在 R 中按最接近的值合并两个 data.table?

Phi*_*tte 4 r data.table

我有这个数据:

\n
library(data.table)\n\nbioargo <- data.table(\n  grp = c("a", "a", "b", "b"),\n  val = 1:4,\n  x = c(2.1, 2.2, 1.9, 3)\n)\n\nhplc <- data.table(\n  x = c(2, 2.3),\n  z = c("foo", "bar")\n)\n
Run Code Online (Sandbox Code Playgroud)\n

我想将两个data.tables 合并到最接近的x值上,但通过grp,因此输出如下(即 \xc2\xa0 对于 中的每一行hplc,获取最接近x的每grpbioargo):

\n
data.table(\n  x = c(2, 2.3),\n  z = c("foo", "bar"),\n  val = c(1, 3, 2, 2)\n)\n#>      x   z val\n#> 1: 2.0 foo   1\n#> 2: 2.3 bar   3\n#> 3: 2.0 foo   2\n#> 4: 2.3 bar   2\n
Run Code Online (Sandbox Code Playgroud)\n

我已尝试以下操作,但它没有返回所需的内容。

\n
hplc[bioargo, on = "x", roll = "nearest"]\n#>      x   z grp val\n#> 1: 2.1 foo   a   1\n#> 2: 2.2 bar   a   2\n#> 3: 1.9 foo   b   3\n#> 4: 3.0 bar   b   4\nbioargo[hplc, on = "x", roll = "nearest"]\n#>    grp val   x   z\n#> 1:   b   3 2.0 foo\n#> 2:   a   2 2.3 bar\n
Run Code Online (Sandbox Code Playgroud)\n

创建于 2022 年 11 月 28 日,使用reprex v2.0.2

\n

B. *_*ang 5

解决您的问题的一种方法:

bioargo[, .SD[hplc, on="x", roll="nearest"], by=grp]

      grp   val     x      z
1:      a     1   2.0    foo
2:      a     2   2.3    bar
3:      b     3   2.0    foo
4:      b     3   2.3    bar
Run Code Online (Sandbox Code Playgroud)