【问题标题】:BTSCS data in R: create tR中的BTSCS数据:创建t
【发布时间】:2015-02-09 18:51:37
【问题描述】:

假设我有以下数据框df:

   id year  y
1   1 1990 NA
2   1 1991  0
3   1 1992  0
4   1 1993  1
5   1 1994 NA
6   2 1990  0
7   2 1991  0
8   2 1992  0
9   2 1993  0
10  2 1994  0
11  3 1990  0
12  3 1991  0
13  3 1992  1
14  3 1993 NA
15  3 1994 NA

创建df的代码:

id<-c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
year<-c(1990,1991,1992,1993,1994,1990,1991,1992,1993,1994,1990,1991,1992,1993,1994)
y<-c(NA,0,0,1,NA,0,0,0,0,0,0,0,1,NA,NA)
df<-data.frame(id,year,y)

我想创建以下向量 t 来衡量在事件发生 (y=1) 或观察的最后一个条目(等于右删失)之前观察存在风险的持续时间:

   id year  y  t
1   1 1990 NA NA
2   1 1991  0  1
3   1 1992  0  2
4   1 1993  1  3
5   1 1994 NA NA
6   2 1990  0  1
7   2 1991  0  2
8   2 1992  0  3
9   2 1993  0  4
10  2 1994  0  5
11  3 1990  0  1
12  3 1991  0  2
13  3 1992  1  3
14  3 1993 NA NA
15  3 1994 NA NA

非常欢迎任何帮助!

【问题讨论】:

    标签: r events duration


    【解决方案1】:

    这是一个可能的data.table 解决方案,它还将通过引用更新您的数据集

    library(data.table)
    setDT(df)[!is.na(y), t := seq_len(.N), id][]
    #     id year  y  t
    #  1:  1 1990 NA NA
    #  2:  1 1991  0  1
    #  3:  1 1992  0  2
    #  4:  1 1993  1  3
    #  5:  1 1994 NA NA
    #  6:  2 1990  0  1
    #  7:  2 1991  0  2
    #  8:  2 1992  0  3
    #  9:  2 1993  0  4
    # 10:  2 1994  0  5
    # 11:  3 1990  0  1
    # 12:  3 1991  0  2
    # 13:  3 1992  1  3
    # 14:  3 1993 NA NA
    # 15:  3 1994 NA NA
    

    【讨论】:

      【解决方案2】:

      base R 选项将是

      df$t <-  with(df, ave(!is.na(y), id, FUN=cumsum)*NA^is.na(y))
      df
      #  id year  y  t
      #1   1 1990 NA NA
      #2   1 1991  0  1
      #3   1 1992  0  2
      #4   1 1993  1  3
      #5   1 1994 NA NA
      #6   2 1990  0  1
      #7   2 1991  0  2
      #8   2 1992  0  3
      #9   2 1993  0  4
      #10  2 1994  0  5
      #11  3 1990  0  1
      #12  3 1991  0  2
      #13  3 1992  1  3
      #14  3 1993 NA NA
      #15  3 1994 NA NA
      

      或使用dplyr

      library(dplyr)
      df %>%
         group_by(id) %>%
         mutate(t=replace(y, !is.na(y), seq(na.omit(y))))   
      

      【讨论】:

        【解决方案3】:

        您可以使用 Dave Armstrong 的软件包 DAMisc 中的 btcs() 命令来实现此目的。

        df <- btscs(df, "y", "year", "id") 
        

        这将显示您的原始数据集以及“spell”列,该列是自上次事件以来的时间单位数。

        【讨论】:

          猜你喜欢
          • 2019-09-10
          • 2012-12-28
          • 1970-01-01
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          • 2022-12-13
          • 1970-01-01
          • 2013-06-14
          相关资源
          最近更新 更多