我有这个数据:
\nlibrary(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)\nRun Code Online (Sandbox Code Playgroud)\n我想将两个data.tables 合并到最接近的x值上,但通过grp,因此输出如下(即 \xc2\xa0 对于 中的每一行hplc,获取最接近x的每grp行bioargo):
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\nRun Code Online (Sandbox Code Playgroud)\n我已尝试以下操作,但它没有返回所需的内容。
\nhplc[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\nRun Code Online (Sandbox Code Playgroud)\n创建于 2022 年 11 月 28 日,使用reprex v2.0.2
\n解决您的问题的一种方法:
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)