gpt4 book ai didi

r - 基于分组时间间隔的活跃月数

转载 作者:行者123 更新时间:2023-12-04 08:46:39 26 4
gpt4 key购买 nike

我有一个表格,里面有在时间间隔(以开始和结束日期为界)执行事件的个人。他们中的一些人有多种事件,而另一些人则没有。有时事件重叠,有时它们被一段不事件分开。
我想按个人分组并计算他们活跃的月数,无论事件如何。
这是一个可重现的小示例:

df <- data.frame(id=c("x", "y", "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")))
它在甘特图上看起来像这样:
enter image description here
有没有人能想到 data.tabledplyr获得以下输出的解决方案?
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

关于r - 基于分组时间间隔的活跃月数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64282052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com