我有以下两个数据表:

dt1 <- data.table(range_col = c(1, 7, 10, 15, 20), new_col = NA)
dt2 <- data.table(min_val = c(0, 6, 11, 16), max_val = c(5, 10, 15, 20), value_col = c(100, 200, 300, 400))

现在,基于数据表‘DT2’中‘min_val’和amp;‘max_val’字段中列‘range_ol’的值和值之间的范围,必须将‘dt2’的‘value_ol’中的相应值分配给‘dt1’的‘new_ol’.

推荐答案

您可以使用findInterval:

dt1[, new_col := dt2$value_col[findInterval(range_col, dt2$min_val)]]

#    range_col value_col
# 1:         1       100
# 2:         7       200
# 3:        10       200
# 4:        15       300
# 5:        20       400

另一个(更安全的)data.table选项是foverlaps:

setkey(dt2, min_val, max_val)
dt1[, range_col2 := range_col]

foverlaps(dt1, dt2, by.x = c("range_col", "range_col2"))[, c("range_col", "value_col")]

而在dplyr年:

library(dplyr)
inner_join(dt1, dt2, by = join_by(between(range_col, min_val, max_val))) %>% 
  select(range_col, value_col)

R相关问答推荐

如何根据包含相同值的某些列获取总额

如何编辑ggplot的图例字使用自定义对象(gtable)?'

将向量组合到一个数据集中,并相应地命名行

如何直接从Fortran到R的数组大小?

如何将旋转后的NetCDF转换回正常的纬度/经度网格,并使用R?

如何在R中对深度嵌套的tibbles中的非空连续行求和?

R-更新面内部的栅格值

如何在R forestplot中为多条垂直线分配唯一的 colored颜色 ?

识别连接的子网(R-igraph)

汇总数据帧中的复制列,保持行的唯一性

自动STAT_SUMMARY统计与手动标准误差之间的差异

减少雨云面之间的间距并绘制所有统计数据点

数值型数据与字符混合时如何进行绑定

在ggploy中创建GeV分布时出错

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

我已经运行了几个月的代码的`Palette()`中出现了新的gglot错误

如何用不同长度的向量填充列表?

使用列名和r中的前缀 Select 列的CREATE函数

将R中对象的CSV数组转换为JSON数组

从多行中 Select 最小值