通过在 data.table 时间序列中查找后续值或先前值来滚动计算以填补空白
rolling computation to fill gaps by finding following or previous values in a data.table time series
我有一个 data.table 看起来像这样:
tsdata <- data.table(time = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
signal = c(0, 1, 1, 0, 0, 1, 0, 0, 0, 1))
我正在尝试填补这些之间的空隙,但前提是零的空隙很小。因此,定义差距的灵活解决方案会很好。在此示例中,与零的差距不应大于 2。
结果应如下所示:
tsdata <- data.table(time = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
signal = c(0, 1, 1, 1, 1, 1, 0, 0, 0, 1))
我的实时序列数据比这大得多,所以非常感谢您的帮助。
按 rleid(signal) 分组,然后填写短的 0 序列,不以 1 开头或结尾。
tsdata[, signal2 := ifelse(signal[1] == 0 &
.N <= 2 &
time[1] > min(tsdata$time) &
time[.N] < max(tsdata$time), 1, signal),
by = rleid(signal)]
tsdata
给予:
time signal signal2
1: 1 0 0
2: 2 1 1
3: 3 1 1
4: 4 0 1
5: 5 0 1
6: 6 1 1
7: 7 0 0
8: 8 0 0
9: 9 0 0
10: 10 1 1
我有一个 data.table 看起来像这样:
tsdata <- data.table(time = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
signal = c(0, 1, 1, 0, 0, 1, 0, 0, 0, 1))
我正在尝试填补这些之间的空隙,但前提是零的空隙很小。因此,定义差距的灵活解决方案会很好。在此示例中,与零的差距不应大于 2。
结果应如下所示:
tsdata <- data.table(time = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
signal = c(0, 1, 1, 1, 1, 1, 0, 0, 0, 1))
我的实时序列数据比这大得多,所以非常感谢您的帮助。
按 rleid(signal) 分组,然后填写短的 0 序列,不以 1 开头或结尾。
tsdata[, signal2 := ifelse(signal[1] == 0 &
.N <= 2 &
time[1] > min(tsdata$time) &
time[.N] < max(tsdata$time), 1, signal),
by = rleid(signal)]
tsdata
给予:
time signal signal2
1: 1 0 0
2: 2 1 1
3: 3 1 1
4: 4 0 1
5: 5 0 1
6: 6 1 1
7: 7 0 0
8: 8 0 0
9: 9 0 0
10: 10 1 1