我有两个数据表如下:
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/