R 使用不同行作为起始行的行之间的差异
我在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
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