r - 查找一组(ID)中的连续出现
问题描述
我的数据集如下所示:
ID start.date end.date program
1 2016.05.05 2017.05.05 A
1 2017.05.06 2019.06.16 A
2 2012.06.05 2013.06.18 B
3 2014.09.09 2017.07.01 B
3 2017.09.09 2018.09.09 B
我想识别连续出现在程序(字符变量)中的人,然后计算每个 end.date 和 start.date 之间的时间(如果出现是连续的)。
所以生成的数据应该是这样的:
ID start.date end.date program days
1 2016.05.05 2017.05.05 A NA
1 2017.05.06 2019.06.16 A . 1
2 2012.06.05 2013.06.18 B . NA
3 2014.09.09 2017.07.01 B . NA
3 2017.09.09 2018.09.09 B . 63
不知道如何从这个开始!
解决方案
library(dplyr)
dat %>%
group_by(ID, program) %>%
arrange(start.date) %>% # Added in case the data isn't sorted
mutate(days = start.date - lag(end.date))
不过,我得到的结果略有不同:
# A tibble: 5 x 5
# Groups: ID, program [3]
ID start.date end.date program days
<int> <date> <date> <chr> <time>
1 1 2016-05-05 2017-05-05 A NA
2 1 2017-05-06 2019-06-16 A 1
3 2 2012-06-05 2013-06-18 B NA
4 3 2014-09-09 2017-07-01 B NA
5 3 2017-09-09 2018-09-09 B 70
为了引入数据,我转换为日期:
dat <- read.table(header = T, stringsAsFactors = F,
text = "ID start.date end.date program
1 2016.05.05 2017.05.05 A
1 2017.05.06 2019.06.16 A
2 2012.06.05 2013.06.18 B
3 2014.09.09 2017.07.01 B
3 2017.09.09 2018.09.09 B") %>%
mutate_at(vars(matches("date")), lubridate::ymd)
推荐阅读
- c - c1 如何在 va_arg 中获取这些值?
- python - Python 子类实例无法访问父启动变量
- python - 使用 matplotlib 查看图像时如何解决“类型错误:图像数据的尺寸无效”错误
- nuxeo - 覆盖 Nuxeo 中的默认图片转换
- nginx - Nginx - “systemctl status nginx”上的错误
- primefaces - 如何使用 Java 更改 Primefaces 7.0 ChartJS Linechart 的 Y 轴?
- php - 如何在 mysql json Array 数据中编写 SELECT 查询
- reactjs - 使用 react-picky 选择菜单时出现问题
- laravel - Laravel 控制器/商店
- amazon-web-services - 如何使用 Cloudformation 将代码从 aws s3 存储桶安全地提取到 Codecommit 存储库?