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