2013-05-01 15 views
5

Ho un set di dati sui livelli di approvazione di stato. Devo ritardare una delle variabili di due anni.Ritardo con dati mancanti

I dati sono annuali e vanno dal 1970 al 2008. Ovviamente, se tengo i dati, perderò alcune osservazioni (ad esempio: 1970 non sarà in grado di trovare i dati del 1968). Sto perdendo queste osservazioni, ma il comando diff restituisce un errore quando provo a ritardare.

Tuttavia, quando si esegue il ritardo ottengo il seguente errore che la sostituzione non corrisponde ai dati:

> df$lagvar <- diff(df$var, lag=2) 
Error in `$<-.data.frame`(`*tmp*`, "lagvar", value = c(-0.4262501, : 
replacement has 230 rows, data has 232 

Ho cercato in giro, ma non riesco a trovare una soluzione. Qualche idea su come aggirare questo?

risposta

6

diff non funziona con il numero iniziale NA per impostazione predefinita. Devi aggiungerli tu stesso.

df$lagvar <- c(NA, NA, diff(df$var, lag=2)) 

Si potrebbe scrivere una semplice funzione wrapper per farlo. Qualcosa del genere, forse:

mydiff <- function(x, ...) { 
    d <- diff(x, ...) 
    c(rep(NA, NROW(x)-NROW(d)), d) 
} 
+0

Grazie! Ha funzionato perfettamente. Ho optato per la prima riga di codice. – user2340913