2017-04-08 4 views
1

Ich habe folgenden Datenrahmen in R:Unterschiede zwischen den Reihen mit unterschiedlichen Zeilen als Start

ID   year event_year 
432674326 2000 NA 
432674326 2001 NA 
432674326 2002 NA 
432674326 2003 NA 
432674326 2004 NA 
432674326 2005 2005_1 
432674326 2006 NA 
432674326 2007 NA 
432674326 2008 NA 
432876423 2003 NA 
432876423 2004 NA 
432876423 2005 NA 
432876423 2006 NA 
432876423 2007 2007_82 
432876423 2008 NA 
432876423 2009 NA 
432876423 2010 NA 

Und ich möchte eine Spalte erstellen, die auf jeder Zeile den Unterschied zwischen meinem Veranstaltungsjahr und dem jeweiligen Jahr berechnet. Das Ergebnis sollte wie folgt aussehen:

ID   year event_year timediff 
432674326 2000 NA   -5 
432674326 2001 NA   -4 
432674326 2002 NA   -3 
432674326 2003 NA   -2 
432674326 2004 NA   -1 
432674326 2005 2005_1  0 
432674326 2006 NA   1 
432674326 2007 NA   2 
432674326 2008 NA   3 
432876423 2003 NA   -4 
432876423 2004 NA   -3 
432876423 2005 NA   -2 
432876423 2006 NA   -1 
432876423 2007 2007_82  0 
432876423 2008 NA   1 
432876423 2009 NA   2 
432876423 2010 NA   3 

Ich war mit plyr versucht, aber ich kann das Basisjahr auf das Ereignis Jahr nicht beheben. Ich kann nur eine bestimmte Verzögerung wie unten verwenden, die mir nicht das beabsichtigte Ergebnis gibt.

df %>% 
    group_by(ID) %>% 
    mutate(timediff = year - lag(year)) 

Jede Hilfe wird sehr geschätzt!

Antwort

0

Wir können dies durch die Zeile subtrahiert, die mit row_number() zu non_NA entsprechen

library(dplyr) 
df1 %>% 
    group_by(ID) %>% 
    mutate(timediff = row_number() - which(!is.na(event_year))) 
#   ID year event_year timediff 
#  <int> <int>  <chr> <int> 
#1 432674326 2000  <NA>  -5 
#2 432674326 2001  <NA>  -4 
#3 432674326 2002  <NA>  -3 
#4 432674326 2003  <NA>  -2 
#5 432674326 2004  <NA>  -1 
#6 432674326 2005  2005_1  0 
#7 432674326 2006  <NA>  1 
#8 432674326 2007  <NA>  2 
#9 432674326 2008  <NA>  3 
#10 432876423 2003  <NA>  -4 
#11 432876423 2004  <NA>  -3 
#12 432876423 2005  <NA>  -2 
#13 432876423 2006  <NA>  -1 
#14 432876423 2007 2007_82  0 
#15 432876423 2008  <NA>  1 
#16 432876423 2009  <NA>  2 
#17 432876423 2010  <NA>  3 
Verwandte Themen