【问题标题】:Create dummies conditionally to the following row有条件地为下一行创建虚拟对象
【发布时间】:2020-07-20 18:14:34
【问题描述】:

我有一个到 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 年不同,但我无法提取代码。有人可以帮忙吗?

【问题讨论】:

  • 2013 年比 2018 年早一年,但它的虚拟值是 0,例如。
  • 是的,因为ID不同,如果到2018年,则不需要Dummy=到1

标签: r


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    tidyverse 的选项

    library(dplyr)
    df1 %>%
         group_by(ID) %>%
         mutate(Dummy = +(Year == max(Year) & Year < 2018))
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2021-08-11
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      相关资源
      最近更新 更多