Criando várias variáveis atrasadas no data.table de uma só vez
Eu estou tentando criar um monte de variáveis atrasadas ao mesmo tempo no data.table. Eu quero que esses valores atrasados sejam por estação e por cobertura de terra. Estou tendo alguma dificuldade. Aqui está o meu exemplo data.table.
require(data.table)
r <- structure(list(station = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"),
landcover = structure(c(2L, 2L, 2L, 4L, 4L, 4L, 1L, 1L, 1L,
3L, 3L, 3L), .Label = c("foam", "Mixed Forest", "other2",
"Sand"), class = "factor"), cv = c(0.273287412020818, 0.453346217936644,
0.235088531585817, 0.703112865400233, 0.221907230708271,
0.278459655651048, 0.376646346809308, 0.662970017835398,
0.296458678818467, 0.390335320625924, 0.712476246695341,
0.535612484651002)), .Names = c("station", "landcover", "cv"
), row.names = c(NA, -12L), class = c("data.table", "data.frame"
))
# station landcover cv
# 1: A Mixed Forest 0.2732874
# 2: A Mixed Forest 0.4533462
# 3: A Mixed Forest 0.2350885
# 4: A Sand 0.7031129
# 5: A Sand 0.2219072
# 6: A Sand 0.2784597
# 7: B foam 0.3766463
# 8: B foam 0.6629700
# 9: B foam 0.2964587
# 10: B other2 0.3903353
# 11: B other2 0.7124762
# 12: B other2 0.5356125
Eu quero criar um monte de variáveis atrasadas. Não estou nem preocupado com os valores de NA que resultarão neste momento. Como crio uma tabela data.t que se parece com a tabela abaixo sem escrever tanto código? Eu preciso que isso ainda esteja no data.table.
r[, cv.lag1 := c(rep(NA,1), head(cv, -1)),by=c("station","landcover")]
r[, cv.lag2 := c(rep(NA,2), head(cv, -2)),by=c("station","landcover")]
r[, cv.lag3 := c(rep(NA,3), head(cv, -3)),by=c("station","landcover")]
r[, cv.lag4 := c(rep(NA,4), head(cv, -4)),by=c("station","landcover")]
r[, cv.lag5 := c(rep(NA,5), head(cv, -5)),by=c("station","landcover")]
r[, cv.lag6 := c(rep(NA,6), head(cv, -6)),by=c("station","landcover")]
r[, cv.lag7 := c(rep(NA,7), head(cv, -7)),by=c("station","landcover")]
r[, cv.lag8 := c(rep(NA,8), head(cv, -8)),by=c("station","landcover")]
r[, cv.lag9 := c(rep(NA,9), head(cv, -9)),by=c("station","landcover")]
r[, cv.lag10 := c(rep(NA,10), head(cv, -10)),by=c("station","landcover")]
station landcover cv cv.lag1 cv.lag2 cv.lag3 cv.lag4 cv.lag5 cv.lag6 cv.lag7 cv.lag8 cv.lag9 cv.lag10
1: A Mixed Forest 0.2732874 NA NA NA NA NA NA NA NA NA NA
2: A Mixed Forest 0.4533462 0.2732874 NA NA NA NA NA NA NA NA NA
3: A Mixed Forest 0.2350885 0.4533462 0.2732874 NA NA NA NA NA NA NA NA
4: A Sand 0.7031129 NA NA NA NA NA NA NA NA NA NA
5: A Sand 0.2219072 0.7031129 NA NA NA NA NA NA NA NA NA
6: A Sand 0.2784597 0.2219072 0.7031129 NA NA NA NA NA NA NA NA
7: B foam 0.3766463 NA NA NA NA NA NA NA NA NA NA
8: B foam 0.6629700 0.3766463 NA NA NA NA NA NA NA NA NA
9: B foam 0.2964587 0.6629700 0.3766463 NA NA NA NA NA NA NA NA
10: B other2 0.3903353 NA NA NA NA NA NA NA NA NA NA
11: B other2 0.7124762 0.3903353 NA NA NA NA NA NA NA NA NA
12: B other2 0.5356125 0.7124762 0.3903353 NA NA NA NA NA NA NA NA