gpt4 book ai didi

r - 如何使用 R 找到每个 ID 的最大连续序列的开始和结束?

转载 作者:行者123 更新时间:2023-12-02 04:23:01 25 4
gpt4 key购买 nike

我有一个数据集。每个 ID 都有一个 0 和 1 序列,一列日期和另一列 num.day。我想为每个 ID 找到最长 1 序列的开始和结束。然后计算开始到结束之间的日期间隔。之后添加结束日期的相应 num.day。

例如下表ID=1,最长序列从4号开始(上面一条记录)到9号结束,所以间隔为5,加上结束日期对应的num.day应该是 day_gap = (9-4) +3 = 8。如果一个ID有多个最长长度相同的序列,则取这些序列中该ID的最大day_gap

enter image description here

这是创建虚拟表的代码

library(data.table)

ID=c(rep(1,10),rep(2,10),rep(3,10))
set.seed(1)
fill=sample(c(0,1),length(ID),replace=TRUE)

dat=data.table(ID,fill)[,date:=seq(.N),by="ID"][date==1,fill:=0]
set.seed(1)
dat$num.days=sample(1:10,nrow(dat),replace=TRUE)

最佳答案

这是我使用 dplyr 的解决方案:

dat %>% 
group_by(ID) %>%
mutate(group = cumsum(fill != lag(fill, default = fill[[1]])) + 1) %>%
ungroup() %>%
filter(fill == 1) %>%
group_by(ID, group) %>%
mutate(fill_group_no_max = max(row_number())) %>%
ungroup() %>%
group_by(ID) %>%
filter(fill_group_no_max == max(fill_group_no_max),
group == max(group)) %>%
summarise(dategap = max(date) - min(date) + last(num.days)) %>%
ungroup()

更新:抱歉!我忘了总结部分

关于r - 如何使用 R 找到每个 ID 的最大连续序列的开始和结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58029058/

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