问题描述
再次从这里开始
我一直在寻找关于stackoverflow的答案,但没有成功
如果您知道在线教程,该教程解释了我应该/如何解决这些问题,我很想听听。
数据
test <- structure(list(record_id = c(110032,110032,110321,110321),start_fu = structure(c(16302,16302,17308,17308),class = "Date"),end_fu = structure(c(17033,17033,17828,17828),start_course = structure(c(16301,17307,16355,16325,16344,16499,17824),course = structure(c(0,1,3,5,0),class = c("haven_labelled","vctrs_vctr","double"))),row.names = c(NA,-9L),groups = structure(list(
record_id = c(110032,.rows = structure(list(c(1L,2L,5L,6L,7L,8L),c(3L,4L,9L)),ptype = integer(0),class = c("vctrs_list_of","list"))),row.names = 1:2,class = c("tbl_df","tbl","data.frame"),.drop = TRUE),class = c("grouped_df","tbl_df","data.frame"))
解释和变量
因此,我从多个记录中收集了后续数据。现在,我正在显示两个记录。在后续过程中,这些人可以切换课程。该课程的开始日期已经记录。
- record_id =单个唯一ID
- start_fu =开始跟踪
- end_fu =随访结束
- start_course =课程的开始日期
- course =哪门课程开始
问题1
我想创建一个名为stop_course的变量。 这是根据下一个课程的start_course计算的。 (开始课程-1天) 如果没有下一个课程,则应基于end_fu日期。
预期输出1
| record_id | start_fu | end_fu | start_course | course | stop_course |
|-----------|------------|------------|--------------|--------|-------------|
| 110032 | 2014-08-20 | 2016-08-20 | 2014-08-19 | 0 | 2014-08-19 |
| 110032 | 2014-08-20 | 2016-08-20 | 2014-08-20 | 1 | 2014-09-11 |
| 110032 | 2014-08-20 | 2016-08-20 | 2014-09-12 | 3 | 2014-09-30 |
| 110032 | 2014-08-20 | 2016-08-20 | 2014-10-01 | 0 | 2014-10-11 |
| 110032 | 2014-08-20 | 2016-08-20 | 2014-10-12 | 5 | 2014-03-04 |
| 110032 | 2014-08-20 | 2016-08-20 | 2015-03-05 | 3 | 2016-08-20 |
| 110321 | 2017-05-22 | 2018-10-24 | 2017-05-21 | 3 | 2017-05-21 |
| 110321 | 2017-05-22 | 2018-10-24 | 2017-05-22 | 3 | 2018-10-19 |
| 110321 | 2017-05-22 | 2018-10-24 | 2018-10-20 | 0 | 2018-10-24 |
问题2 最后,我想为每个record_id创建一个包含其课程的日常列表。 因此:创建一个变量day_count
预期输出2
| record_id | day_count | date | course |
|-----------|-----------|------------|--------|
| 110032 | 0 | 2014-08-19 | 0 |
| 110032 | 1 | 2014-08-20 | 1 |
| 110032 | 2 | 2014-08-21 | 1 |
| ... | ... | ... | ... |
| 110032 | 24 | 2014-09-12 | 3 |
| 110032 | 25 | 2013-09-13 | 3 |
| ... | ... | ... | ... |
希望您可以帮助我进行编码或为我提供一些很好的教程
体重 KB
解决方法
在这里使用dplyr
和tidyr
是一种方法:
我们可以使用lead
来获取start_course
的下一个日期,并从中减去1天,其中default
的值是last
中每个{{ {1}}。然后,我们可以创建一个从第一个日期到最后一个日期的序列,end_fu
的值record_id
,并创建一个fill
列。
course