r - 根据指定间隔映射值

标签 r data.table intervals

假设我们有以下data.table:

library(data.table)
dt <- data.table(x=c(-0.01, -0.001, 0, 0.01,0.02,0.03,1,3,4,10,20,25), value=c(rep(1,3), rep(2, 3), rep(3, 2), rep(4, 2), rep(5, 2)))

然后,我使用以下内容指定间隔:

library(Hmisc)
dt[, int:=cut2(x, cuts=c(-Inf, 0.01, 1, 4, 20, Inf))]

返回,

         x value           int
 1: -0.010     1 [ -Inf, 0.01)
 2: -0.001     1 [ -Inf, 0.01)
 3:  0.000     1 [ -Inf, 0.01)
 4:  0.010     2 [ 0.01, 1.00)
 5:  0.020     2 [ 0.01, 1.00)
 6:  0.030     2 [ 0.01, 1.00)
 7:  1.000     3 [ 1.00, 4.00)
 8:  3.000     3 [ 1.00, 4.00)
 9:  4.000     4 [ 4.00,20.00)
10: 10.000     4 [ 4.00,20.00)
11: 20.000     5 [20.00,  Inf]
12: 25.000     5 [20.00,  Inf]

假设有新的data.table

dtnew <- data.table(x=c(-0.001, 0.4, 0.3, 5, 25))

        x
1: -0.001
2:  0.400
3:  0.300
4:  5.000
5: 25.000

我想要的是将值dtnewdt中的间隔匹配,以便我可以获得dt中的value >。预期返回为

        x value           int
1: -0.001     1 [ -Inf, 0.01)
2:  0.400     2 [ 0.01, 1.00)
3:  0.300     2 [ 0.01, 1.00)
4:  5.000     4 [ 4.00,20.00)
5: 25.000     5 [20.00,  Inf]

我尝试为 dtnew 分配间隔,以便我可以使用以下命令merge(dtnew, dt, by = 'int'):

dtnew[, int:=cut2(y, cuts=c(-Inf, 0.01, 1, 4, 20, Inf))] 其间隔与 中使用的相同dt。但是,第一行的间隔与 dt 不同,如下所示:

1: -0.001          -Inf
2:  0.400 [ 0.01, 1.00)
3:  0.300 [ 0.01, 1.00)
4:  5.000 [ 4.00,20.00)
5: 25.000 [20.00,  Inf]

您能给我一些建议吗?

最佳答案

这是一个简单的滚动连接:

dt[dtnew, on="x", roll=Inf]
#     x     value           int
# 1: -0.001     1 [ -Inf, 0.01)
# 2:  0.400     2 [ 0.01, 1.00)
# 3:  0.300     2 [ 0.01, 1.00)
# 4:  5.000     4 [ 4.00,20.00)
# 5: 25.000     5 [20.00,  Inf]

对于dtnew中的每一行,通过查找x来找到dt中的匹配行。如果 dtnew 中的特定值不匹配,而是落在 dt 中的两个值之间的间隙中,则结转前一个/前一个值。

例如,对于 dtnew$x = 0.4,它位于第 6 行 0.03 和第 7 行 1.00 之间。因此前一行 (=6) 将作为匹配行结转。

关于r - 根据指定间隔映射值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39240545/

相关文章:

r - data.table 中的加权滚动中位数 (r)

r - 按列模式和绑定(bind)行拆分 data.frame R

python - 如何找到最大的共同范围?

R:避免意外覆盖变量

r - 零膨胀负二项式分布函数 NaN 警告

制作表格的R函数不起作用

python - R Lattice 类似于 Python、Pandas 和 Matplotlib 的绘图

r - 如何加快 R data.table 中缺失的搜索过程

algorithm - 不规则间隔——在哪里划线?

php - INTERVAL 的 MySQL 查询问题,如果没有提供数据则需要 0