2013-05-01 28 views
5

Mam zestaw danych na temat ocen zatwierdzania na poziomie krajowym. Muszę opóźnić jedną ze zmiennych o dwa lata.Opóźnienie z brakującymi danymi

Dane są roczne i obejmują okres od 1970 do 2008 roku. Oczywiście, jeśli będę opóźniony w danych, stracę kilka obserwacji (tj .: 1970 nie będzie w stanie znaleźć danych z 1968 roku). Nic mi nie jest z utratą tych obserwacji, ale polecenie diff zwraca błąd, gdy próbuję opóźnić.

Jednak gdy uruchomię lag pojawia się następujący błąd, że wymiana nie pasuje do danych:

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

Rozglądałem się dookoła, ale nie może znaleźć rozwiązanie. Wszelkie pomysły, jak sobie z tym poradzić?

Odpowiedz

6

diff domyślnie nie jest opatrzony wiodącym NA. Musisz dodać je samemu.

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

Możesz napisać prostą funkcję otoki, aby zrobić to za Ciebie. Coś takiego może:

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

Dzięki! To działało idealnie. Zdecydowałem się na pierwszy wiersz kodu. – user2340913

Powiązane problemy