我有这个数据:

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

我try 了以下方法,但它没有给我想要的东西.

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

推荐答案

解决问题的一种方法是:

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

R相关问答推荐

根据列表中项目的名称多次合并数据框和列表

在R底座中更改白天和夜晚的背景 colored颜色

带有叠加饼图系列的Highmap

在R中创建一个包含转换和转换之间的时间的列

当月份额减go 当月份额

使用across,starts_with和ifelse语句变更多个变量

条形图和在Ploly中悬停的问题

如果某些列全部为NA,则更改列

如何使用ggplot对堆叠条形图进行嵌套排序?

根据现有列的名称和字符串的存在进行变异以创建多个新列

根据另一列中的值和条件查找新列的值

我们如何在R中透视数据并在之后添加计算

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

根据r中每行中的日期序列,使用列名序列创建新列

如何预测原始数据集并将值添加到原始数据集中

如何移动点以使它们的打印不重叠

对一个数据帧中另一个数据帧中的值进行计数

合并多个数据帧,同时将它们的名称保留为列名?

如何在用`{{ }}`创建的变量上使用整洁 Select ?

R直方图存储计算的bin值