R Creare una copia di una colonna in cui la nuova colonna è compensato da una certa quantità fissa
Domanda
Sto cercando di creare una copia di una colonna esistente in una dataframe che viene compensato da un numero di righe.
es. se column2 è una copia di column1 compensato da 1, quindi
> dataframe
$column1
[1] 1 2 3 4 5
$column2
[1] 0 1 2 3 4
ho avuto un certo successo con il seguente codice:
offset7 <- rep(0, 7)
dataframe$column1.prev7 = c(offset7, dataframe$column1[1:(length(dataframe$column1)-7)])
Tuttavia inizia dà errori se compensato da 30 o più. I miei dati è abbastanza lungo per questo non è un problema dello spostamento essendo maggiore del numero di righe. L'errore è:
Error in dataframe$column1[1:(length(dataframe$column1) - 30)] :
only 0's may be mixed with negative subscripts
Grazie in anticipo! Una versione gratuita ciclo veloce che gioca piacevole con plyr sarebbe preferibile. L'intenzione è quella di suddividere i dati TimeSeries in vari ritardi fino ad un anno e poi analizzare i risultati in vari modi.
Soluzione
usare una vera e propria classe di serie temporali per le operazioni di serie temporali. preferiti popolari sono zoo e XTS entrambi i quali hanno un sacco di documentazione.
Come semplice esempio, si consideri
> library(xts)
> foo <- xts(100:109, order.by=Sys.Date()+0:9)
> merge(foo, l1=lag(foo,1), lm1=lag(foo,-1))
foo l1 lm1
2010-11-18 100 NA 101
2010-11-19 101 100 102
2010-11-20 102 101 103
2010-11-21 103 102 104
2010-11-22 104 103 105
2010-11-23 105 104 106
2010-11-24 106 105 107
2010-11-25 107 106 108
2010-11-26 108 107 109
2010-11-27 109 108 NA
>
Ma non farlo a mano. E cercare qui per i '[d] XTS' o [r] zoo' per la ricerca all'interno del tag R.