我有购买不同客户的数据,其中每个购买在特定时间间隔内的催款水平都不同,时间间隔可以重叠。
我的目标是在一段时间内达到一位客户的最高催款水平。为了简单起见,时间间隔是整数。 from
和to
的数据类型为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
答案 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