R 使用不同行作为起始行的行之间的差异

R 使用不同行作为起始行的行之间的差异,r,dataframe,plyr,panel-data,R,Dataframe,Plyr,Panel Data,我在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

我在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))

任何帮助都将不胜感激

我们可以用
row\u number()

库(dplyr)
df1%>%
分组依据(ID)%>%
mutate(timediff=row_number()-其中(!是.na(事件年)))
#ID年份事件\u年份时间差异
#                  
#1  432674326  2000              -5
#2  432674326  2001              -4
#3  432674326  2002              -3
#4  432674326  2003              -2
#5  432674326  2004              -1
#6  432674326  2005     2005_1        0
#7  432674326  2006               1
#8  432674326  2007               2
#9  432674326  2008               3
#10 432876423  2003              -4
#11 432876423  2004              -3
#12 432876423  2005              -2
#13 432876423  2006              -1
#14 432876423  2007    2007_82        0
#15 432876423  2008               1
#16 432876423  2009               2
#17 432876423  2010               3

我们可以用
行编号()减去对应于非NA的行

库(dplyr)
df1%>%
分组依据(ID)%>%
mutate(timediff=row_number()-其中(!是.na(事件年)))
#ID年份事件\u年份时间差异
#                  
#1  432674326  2000              -5
#2  432674326  2001              -4
#3  432674326  2002              -3
#4  432674326  2003              -2
#5  432674326  2004              -1
#6  432674326  2005     2005_1        0
#7  432674326  2006               1
#8  432674326  2007               2
#9  432674326  2008               3
#10 432876423  2003              -4
#11 432876423  2004              -3
#12 432876423  2005              -2
#13 432876423  2006              -1
#14 432876423  2007    2007_82        0
#15 432876423  2008               1
#16 432876423  2009               2
#17 432876423  2010               3
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