将数据转换为开始/停止/长格式

时间:2019-09-12 12:19:04

标签: r dplyr transform survival-analysis cox-regression

我想用Cox回归进行生存分析。因此,我需要根据观察时间将数据转换为开始-停止格式,而不是一次观察。

示例数据集:

  • 用户标识指示用户标识

  • day表示自第一次事件以来的天数

  • 状态指示是否在这一天发生了感兴趣的事件(1 =是,0 =否)

format()

我要使用以下格式的数据:

da1 <- data.frame(userid = c(1,1,1,2,2,2,3,3,3), day= c(1,2,3,1,2,3,1,2,3), status = c(0,0,1,1,0,0,0,1,1))

da1
  userid day status
1      1   1      0
2      1   2      0
3      1   3      1
4      2   1      1
5      2   2      0
6      2   3      0
7      3   1      0
8      3   2      1
9      3   3      1

如果我也有一些代码来汇总观察结果(如果连续一天以上没有发生任何事件),那就太好了。

da2 <- data.frame(userid = c(1,1,1,2,2,2,3,3,3), startday= c(0,1,2,0,1,2,0,1,2), endday = c(1,2,3,1,2,3,1,2,3), status = c(0,0,1,1,0,0,0,1,1))

da2
  userid startday endday status
1      1        0      1      0
2      1        1      2      0
3      1        2      3      1
4      2        0      1      1
5      2        1      2      0
6      2        2      3      0
7      3        0      1      0
8      3        1      2      1
9      3        2      3      1

我尝试了以下代码,但是给出了错误的结果:

da3 <- data.frame(userid = c(1,1,2,2,3,3,3), startday= c(0,2,0,2,0,1,2), endday = c(2,3,1,3,1,2,3), status = c(0,1,1,0,0,1,1))

da3
  userid startday endday status
1      1        0      2      0
2      1        2      3      1
3      2        0      1      1
4      2        2      3      0
5      3        0      1      0
6      3        1      2      1
7      3        2      3      1

1 个答案:

答案 0 :(得分:2)

我们可以group_by userid并为startday从0到组中max的{​​{1}}的值和day从1的序列创建一个序列到endday

max(day)