Предположим, у меня есть следующие данные:
library(data.table)
set.seed(42)
t <- data.table(time=1001:2000, period=round(runif(1000,1,5)), a=round(rnorm(1000)))
p <- data.table(id=1:10, time=sample(1000:1100,5), a=round(rnorm(10)))
> t[27:38]
time period a
1: 1027 3 -1
2: 1028 5 -1
3: 1029 3 0
4: 1030 4 -2
5: 1031 4 -2
6: 1032 4 -1
7: 1033 3 0
8: 1034 4 1
9: 1035 1 0
10: 1036 4 0
11: 1037 1 0
12: 1038 2 -1
> head(p)
id time a
1: 1 1027 1
2: 2 1094 1
3: 3 1044 -1
4: 4 1053 1
5: 5 1015 1
6: 6 1027 -1
, которые аналогичны данным, которые я публиковал ранее как объединенные периоды для получения временных последовательностей, одновременно для разных начальных точек , но теперь имеетдополнительная переменная a
, которая переносится из t
.
В отличие от моего предыдущего вопроса, моя цель состоит в том, чтобы создать последовательности прямо в p
путем объединения n периодов в t
.Для n=4
результат в идеале должен выглядеть следующим образом:
> head(p)
id time a
1: 1 1027 1
2: 1 1030 -1
3: 1 1034 -2
4: 1 1038 1
5: 1 1040 -1
6: 2 1094 1
, поскольку для идентификатора 1, начиная с 1027, последовательность будет 1027
, 1027+3=1030
, 1030+4=1034
, 1034+4=1038
и 1038+2=1040
, где приращения взяты с t
.Кроме того, t$a
"берется с собой", чтобы заполнить для p$a
.
В моем предыдущем вопросе Jaap дал фантастическое решение для получения двумерного вывода с одной строкой на id
.Интересно, можно ли это сделать прямо в p
.Возможно, это можно сделать с помощью многократного объединения t
в p
или, возможно, есть более эффективное решение (потому что здесь ключевой является эффективность).