我想用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
答案 0 :(得分:2)
我们可以group_by
userid
并为startday
从0到组中max
的{{1}}的值和day
从1的序列创建一个序列到endday
。
max(day)