R 有条件地将虚拟对象创建到下一行

R 有条件地将虚拟对象创建到下一行,r,R,在2018年之前的不同年份,我有一个具有不同ID的面板数据集 Year ID 2015 111 2016 111 2017 111 2018 111 2003 222 2004 222 2005 222 2006 222 2011 333 2012 333 2013 333 2014 333 我想创建第三个虚拟变量,如果在2018年之前(即我的观察期结束),则该变量在观察结束的那一年的值为1,以便在结束时具有以下内容: Year ID Dummy 2015

在2018年之前的不同年份,我有一个具有不同ID的面板数据集

Year  ID 
2015  111
2016  111
2017  111
2018  111
2003  222
2004  222
2005  222
2006  222
2011  333
2012  333
2013  333
2014  333
我想创建第三个虚拟变量,如果在2018年之前(即我的观察期结束),则该变量在观察结束的那一年的值为1,以便在结束时具有以下内容:

Year  ID   Dummy
2015  111    0
2016  111    0
2017  111    0
2018  111    0
2003  222    0
2004  222    0
2005  222    0
2006  222    1
2011  333    0
2012  333    0
2013  333    0
2014  333    1
我这样做是为了在创建生存分析之前准备我的面板数据。我想把一个if语句放在一起,条件是ID列中的下一行与前一行不同,而相应年份与2018年不同,但我无法提取代码。有人能帮忙吗?

库(data.table)
library(data.table)
setDT(df)

df[, Dummy := as.integer(Year == max(Year) & Year < 2018), by = ID]

df
#     Year  ID Dummy
#  1: 2015 111     0
#  2: 2016 111     0
#  3: 2017 111     0
#  4: 2018 111     0
#  5: 2003 222     0
#  6: 2004 222     0
#  7: 2005 222     0
#  8: 2006 222     1
#  9: 2011 333     0
# 10: 2012 333     0
# 11: 2013 333     0
# 12: 2014 333     1
setDT(df) df[,Dummy:=as.integer(Year==max(Year)&Year<2018),by=ID] df #年份ID虚拟 # 1: 2015 111 0 # 2: 2016 111 0 # 3: 2017 111 0 # 4: 2018 111 0 # 5: 2003 222 0 # 6: 2004 222 0 # 7: 2005 222 0 # 8: 2006 222 1 # 9: 2011 333 0 # 10: 2012 333 0 # 11: 2013 333 0 # 12: 2014 333 1
带有
tidyverse的选项

library(dplyr)
df1 %>%
     group_by(ID) %>%
     mutate(Dummy = +(Year == max(Year) & Year < 2018))
库(dplyr)
df1%>%
分组依据(ID)%>%
突变(虚拟=+(年份==最大(年份)和年份<2018))

2013是2018年之前的一年,但它的虚拟值是0,例如。是的,因为ID不同,如果它上升到2018年,则不需要虚拟值=1