r - 根据另一个数据表中两个字段的值范围为一个数据表中的字段分配值

标签 r data.table

我有两个数据表如下:

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”中“range_col”列的值以及“min_val”和“max_val”字段中的值之间的范围,必须将“dt2”的“value_col”中的相应值分配给“new_col” “dt1”的

最佳答案

您可以使用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 - 根据另一个数据表中两个字段的值范围为一个数据表中的字段分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75741474/

相关文章:

r - 如何在特定条件下创建等级变量?

RMarkdown : How to pass arguments to bash chunk defined as variables in R?

r - Lattice中的facet_wrap相当于什么

r - 如何在ggplot图中绘制y轴和x轴的刻度和数量?

r - 如何在for循环中引用变量?

R:树上的聚合值

r - 在 R 数据框中的所有列中搜索值

R 在嵌套数据集中添加一列

r - 在knitr block 内的循环中评估LaTeX语法并调整绘图dpi

R 给定相同维度数据表的列表,生成每个单元格均值的汇总