2017-04-08 34 views
1

我在R中的以下數據框:差異采用不同的行作爲開始

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 

而且我想創建一個計算我的活動一年,在各行各年之間的差異列。結果應該如下所示:

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 

我與plyr努力,但我不能修復的基準年到事件的一年。我只能用下面的某個延遲,這並沒有給我預期的結果。

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

任何幫助將不勝感激!

回答

0

我們可以通過減去對應於non_NA與row_number()

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 
行做到這一點