【发布时间】:2018-08-13 15:25:04
【问题描述】:
请考虑以下几点:
在与以下示例类似的data.frame 中,记录了每位患者的用药日期。目标是计算“到下一次治疗的时间”,其定义为从一次治疗开始到下一次治疗开始之间的天数。 data.frame 中的所有其他列(此处未显示)包含需要保留的不同信息。
我的做法如下:
library("dplyr")
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
db <- data.frame(id = c(rep("a", 5), rep("b", 3)),
date = c(rep(as.Date("2018-01-01"), 3),
rep(as.Date("2018-01-20"), 2),
rep(as.Date("2018-01-01"), 3)))
db
#> id date
#> 1 a 2018-01-01
#> 2 a 2018-01-01
#> 3 a 2018-01-01
#> 4 a 2018-01-20
#> 5 a 2018-01-20
#> 6 b 2018-01-01
#> 7 b 2018-01-01
#> 8 b 2018-01-01
db %>%
group_by(id) %>%
mutate(time.to.next = as.numeric(lead(date) - date))
#> Warning: package 'bindrcpp' was built under R version 3.4.4
#> # A tibble: 8 x 3
#> # Groups: id [2]
#> id date time.to.next
#> <fct> <date> <dbl>
#> 1 a 2018-01-01 0.
#> 2 a 2018-01-01 0.
#> 3 a 2018-01-01 19.
#> 4 a 2018-01-20 0.
#> 5 a 2018-01-20 NA
#> 6 b 2018-01-01 0.
#> 7 b 2018-01-01 0.
#> 8 b 2018-01-01 NA
由reprex package (v0.2.0) 于 2018 年 8 月 13 日创建。
然而,我需要的是一个看起来像这样的data.frame(或tibble):
#> # A tibble: 8 x 3
#> # Groups: id [2]
#> id date time.to.next
#> <fct> <date> <dbl>
#> 1 a 2018-01-01 19.
#> 2 a 2018-01-01 19.
#> 3 a 2018-01-01 19.
#> 4 a 2018-01-20 NA
#> 5 a 2018-01-20 NA
#> 6 b 2018-01-01 NA
#> 7 b 2018-01-01 NA
#> 8 b 2018-01-01 NA
问题:我如何才能使每组的所有值都相同,尽管唯一的计算值是一组的最后一次观察与下一组的第一次观察之间的差异? p>
非常感谢。
【问题讨论】: