如何解决基于分组时间间隔的有效月份数
我有一张桌子,上面有一些个人,他们在时间间隔内(由开始日期和结束日期限定)进行活动。他们中有些人有一些活动,而另一些则没有。有时,活动重叠,有时又被一段闲置时间隔开。
无论活动如何,我都想按个人分组并计算他们活跃的月数。
这是一个可复制的小例子:
df <- data.frame(id=c("x","y","z","z"),activity=c("a1","b1","b2","c1","c2"),start=c(as.Date("2017-07-01"),as.Date("2018-04-01"),as.Date("2018-07-01"),as.Date("2017-07-01"),as.Date("2018-02-01")),end=c(as.Date("2018-07-31"),as.Date("2018-05-31"),as.Date("2018-07-31"),as.Date("2018-02-28"),as.Date("2018-07-31")))
有人能想到data.table
或dplyr
解决方案来获得以下输出吗?
id | active_months
x | 13
y | 3
z | 13
解决方法
我们可以在start
和end
日期之间创建每月顺序,并为每个id
计算唯一的月份值。
library(dplyr)
df %>%
group_by(id) %>%
summarise(months = n_distinct(unlist(purrr::map2(start,end,~seq(.x,.y,by = 'month')))))
# id months
# <chr> <int>
#1 x 13
#2 y 3
#3 z 13
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。