如何合并两个数据,表上最接近的值,而且还按组在R?

vjrehmav  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(127)

我有这样的数据:

library(data.table)

bioargo <- data.table(
  grp = c("a", "a", "b", "b"),
  val = 1:4,
  x = c(2.1, 2.2, 1.9, 3)
)

hplc <- data.table(
  x = c(2, 2.3),
  z = c("foo", "bar")
)

我想在最接近的x值上合并两个data.table,但要按grp合并,因此输出如下(即,对于hplc中的每一行,为bioargo中的每个grp获取最接近的x):

data.table(
  x = c(2, 2.3),
  z = c("foo", "bar"),
  val = c(1, 3, 2, 2)
)
#>      x   z val
#> 1: 2.0 foo   1
#> 2: 2.3 bar   3
#> 3: 2.0 foo   2
#> 4: 2.3 bar   2

我已经尝试了以下方法,但它没有返回所需的内容。

hplc[bioargo, on = "x", roll = "nearest"]
#>      x   z grp val
#> 1: 2.1 foo   a   1
#> 2: 2.2 bar   a   2
#> 3: 1.9 foo   b   3
#> 4: 3.0 bar   b   4
bioargo[hplc, on = "x", roll = "nearest"]
#>    grp val   x   z
#> 1:   b   3 2.0 foo
#> 2:   a   2 2.3 bar

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

yqkkidmi

yqkkidmi1#

解决问题的一种方法:

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

相关问题