R 有条件地将虚拟对象创建到下一行
在2018年之前的不同年份,我有一个具有不同ID的面板数据集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
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