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

Differences between rows using different row as start

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

减去对应于 non_NA 的行来做到这一点
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