gpt4 book ai didi

r - 如果相同则折叠连续周期

转载 作者:行者123 更新时间:2023-12-02 18:23:10 24 4
gpt4 key购买 nike

我尝试用 R 代码表达我的用例,如下所示:

haves <- data.frame(
id = c(1,1,1,1)
, start = c(as.Date('2022-01-01'), as.Date('2022-02-01'), as.Date('2022-02-01'), as.Date('2022-02-16'))
, end = c(as.Date('2022-01-31'), as.Date('2022-02-28'), as.Date('2022-02-15'), as.Date('2022-02-28'))
, category = c("A", "B", "A", "A")
)

haves

enter image description here

wants <- data.frame(
id = c(1,1,1)
, start = c(as.Date('2022-01-01'), as.Date('2022-02-01'), as.Date('2022-02-01'))
, end = c(as.Date('2022-01-31'), as.Date('2022-02-28'), as.Date('2022-02-28'))
, category = c("A", "B", "A")
)

wants

enter image description here

基本上,如果时间段是连续的并且包含相同的类别,但也取决于 id,我想折叠时间段(请参阅wants中的最后两列)。你认为这可能吗?按 id 和类别进行分组,然后在开始和结束时使用最小值和最大值是行不通的。

最佳答案

使用rle,这应该可以工作:

r <- rle(haves$category)$l
haves %>%
mutate(cons = rep(seq(r), r)) %>%
group_by(id, category, cons) %>%
summarise(start = min(start),
end = max(end))

# A tibble: 3 x 5
# Groups: id, category [2]
id category cons start end
<dbl> <chr> <int> <date> <date>
1 1 A 1 2022-01-01 2022-01-31
2 1 A 3 2022-02-01 2022-02-28
3 1 B 2 2022-02-01 2022-02-28

或者使用cons = data.table::rleid(category)

关于r - 如果相同则折叠连续周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70590241/

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