r - dplyr:使用lead()后在分组的data.frame中填充系列
问题描述
请考虑以下几点:
在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 包(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
问题:我如何才能实现每组的所有值都相同,尽管唯一的计算值是一组的最后一次观察与后续组的第一次观察之间的差异?
非常感谢。
解决方案
一种选择是首先删除id和date中的所有重复项,计算时间差,然后加入db
id和date列:
db %>%
select(id, date) %>%
distinct() %>%
group_by(id) %>%
mutate(time.to.next = as.numeric(lead(date) - date)) %>%
inner_join(db)
#Joining, by = c("id", "date")
# A tibble: 8 x 3
# Groups: id [?]
# 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
推荐阅读
- go - 使用 godoc 启动本地文档服务器时出现问题
- excel - Excel Power Query:从具有多个未固定工作表的多个未固定文件中获取数据
- python - 计算自上次维护以来的日期差异的有效方法是什么?
- python - 使用 Boto3 从 DynamoDB 获取时出错
- django - 带有验证的 Django 文件上传不起作用
- python - 如何使 send() 函数接受字节字符串作为连续更新的输入?
- python - openpyxl load_workbook 错误:对非序列类型的迭代
- php - PHP分页在本地版本上工作正常,但在服务器上不工作
- java - 构造函数没有初始化正确的值
- reactjs - 没有 Redux 或 Mobx 的中央状态管理?