2013-05-01 13 views
5

Ich habe ein Dataset auf Bundesstaatenebene Genehmigung Ratings. Ich muss einer der Variablen um zwei Jahre nacheilen.Lag mit fehlenden Daten

Die Daten sind jährlich und erstrecken sich von 1970 bis 2008. Offensichtlich, wenn ich den Daten nachlaufe, werde ich einige Beobachtungen verlieren (dh: 1970 wird nicht in der Lage sein, die 1968 Daten zu finden) Ich bin gut damit, diese Beobachtungen zu verlieren, aber der Befehl diff gibt einen Fehler zurück, wenn ich versuche zu verzögern.

Allerdings, wenn ich ausführen, um die Verzögerung ich folgende Fehlermeldung erhalten, dass der Austausch die Daten nicht übereinstimmen:

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

Ich habe um gesucht, aber keine Lösung finden. Irgendwelche Ideen, wie man das umgehen kann?

Antwort

6

diff wird nicht standardmäßig mit NA vorangestellt. Sie müssen diese selbst hinzufügen.

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

Sie könnten eine einfache Wrapper-Funktion schreiben, um es für Sie zu tun. Etwas wie das, vielleicht:

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

Danke! Das hat perfekt funktioniert. Ich habe mich für die erste Codezeile entschieden. – user2340913