【问题标题】:Generating Data for Survival Analysis in r为 r 中的生存分析生成数据
【发布时间】:2020-03-31 09:15:17
【问题描述】:

我有一个数据框来记录个人是否每年服用某种药物:

df_og <- data.frame(
  id=c(1,1,1,2,2,2,3,3,3,3),
  year=c(2001,2002,2003,2001,2002,2003,2000,2001,2002,2003),
  med1=c(1,1,1,1,1,0,0,0,0,1),
  med2=c(0,0,0,0,0,1,0,0,1,0),
  med3=c(0,0,0,0,0,0,1,1,0,0)
)

看起来像这样:

id  year   med1 med2 med3 
1   2001    1    0    0
1   2002    1    0    0
1   2003    1    0    0
2   2001    1    0    0
2   2002    1    0    0
2   2003    0    1    0
3   2000    0    0    1
3   2001    0    0    1
3   2002    0    1    0
3   2003    1    0    0

所以id 列显示受试者的 id,year 观察年份,med1-2-3 变量是虚拟变量,如果已服用药物,则值为 =1,否则为 =0。

我正在尝试创建一个新的数据框:

  id = c(1,2,2,3,3,3),
  time = c(3,2,1,2,1,1),
  failure = c(0,1,0,1,1,0),
  group = c(1,1,2,3,2,1)) 

看起来像:

  id  time failure med_group
   1   3      0        1
   2   2      1        1
   2   1      0        2
   3   2      1        3
   3   1      1        2
   3   1      0        1

其中:id 显示受试者 ID,time 计算受试者连续服用某种药物的年数,failure 如果受试者在给定年份更换药物,med_group 受试者的药物一直服用。

例子:

  1. 第一行df,主题id=1已经连续3年占用med1,所以time=3还没有切换到其他,所以failure=0
  2. 第二排dfid=2已经连续2年占用med1,所以time=2failure=0med_group=1。但后来切换到med2,所以time=1failure=1med_group=2

以此类推。这是一个棘手的操作,所以我希望问题足够清楚。

欢迎提出任何建议!干杯

【问题讨论】:

    标签: r dataframe binary survival-analysis


    【解决方案1】:

    我们可以获取长格式的数据,将value = 0replace每个id中最后一个值的行删除为0,表示没有失败。然后我们group_byname 计算每个组中的行数以及failure 是否发生。

    library(dplyr)
    
    df_og %>%
      tidyr::pivot_longer(cols = starts_with('med')) %>%
      filter(value != 0) %>%
      group_by(id) %>%
      mutate(value = replace(value, n(), 0)) %>%
      group_by(name, add = TRUE) %>%
      summarise(time = n(), 
                failure = +all(value == 1))
    
    
    #     id name   time failure
    #  <dbl> <chr> <int>   <int>
    #1     1 med1      3       0
    #2     2 med1      2       1
    #3     2 med2      1       0
    #4     3 med1      1       0
    #5     3 med2      1       1
    #6     3 med3      2       1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      相关资源
      最近更新 更多