通过重叠时间间隔找出变量的最大值

时间:2019-05-19 15:59:13

标签: r data.table

我有购买不同客户的数据,其中每个购买在特定时间间隔内的催款水平都不同,时间间隔可以重叠。

我的目标是在一段时间内达到一位客户的最高催款水平。为了简单起见,时间间隔是整数。 fromto的数据类型为POSIXct, format: "2018-04-10 15:46:38"

library(data.table)

input <- data.table(purchase = c(1,1,1,1
                   ,2,2,2,2
                   ,3,3,3,3
                   ,4,4,4,4)
           , state = c(-1,0,1,-1
                       ,-1,0,1,-1
                       ,-1,1,2,-1
                       ,-1,0,1,2)
           , from = c(0,1,4,6
                      ,2,4,5,8
                      ,3,7,9,10
                      ,0,1,3,9)
           , to = c(1,4,6,99
                    ,4,5,8,99
                    ,7,9,10,99
                    ,1,3,9,99))

根据以上数据,我想在不重叠的新时间间隔内创建最大催款水平。

output <- data.table(state = c(-1,0,1,2)
           , from = c(0,1,4,9)
           , to = c(1,4,9,99))

   state from to
1:    -1    0  1
2:     0    1  4
3:     1    4  9
4:     2    9 99

1 个答案:

答案 0 :(得分:2)

可能的解决方案:

output <- input[, k := cumsum(c(TRUE, tail(from, -1) >= head(to, -1))), by = state
                ][k == 1, .(from = from[1], to = to[.N]), by = state]

给出:

> output
   state from to
1:    -1    0  1
2:     0    1  4
3:     1    4  9
4:     2    9 99