gpt4 book ai didi

r - 识别/描述向量中具有特定值的连续几天的序列

转载 作者:行者123 更新时间:2023-12-05 09:01:11 26 4
gpt4 key购买 nike

我有一个大型数据集,其中包含每日值,指示一年中的特定一天是否特别热(用 1 或 0 表示)。我的目标是识别 3 个或更多特别炎热的日子的序列,并创建一个包含每个日子的长度以及开始和结束日期的新数据集。

我对如何去做这件事有点困惑。

我的数据集示例:

hotday <- c(0,1,0,1,1,1,0,0,1,1,1,1,0)
dates <- seq.Date(from=as.Date("1990-06-01"), by="day",length.out = length(hotday))
df <- data.frame(dates,hotday)
df
dates hotday
1 1990-06-01 0
2 1990-06-02 1
3 1990-06-03 0
4 1990-06-04 1
5 1990-06-05 1
6 1990-06-06 1
7 1990-06-07 0
8 1990-06-08 0
9 1990-06-09 1
10 1990-06-10 1
11 1990-06-11 1
12 1990-06-12 1
13 1990-06-13 0

我想要实现的输出应该如下所示:

   startdate    enddate length
1 1990-06-04 1990-06-06 3
2 1990-06-09 1990-06-12 4

感谢您的帮助,我愿意接受任何方法或建议。

最佳答案

如果你更喜欢 tidyverse 语法,你可以这样做

library(dplyr) 

df %>%
mutate(run = cumsum(c(1, abs(diff(hotday))))) %>%
filter(hotday == 1) %>%
group_by(run) %>%
summarize(startdate = first(dates), enddate = last(dates), length = n()) %>%
ungroup() %>%
select(-run) %>%
filter(length >= 3)
#> # A tibble: 2 x 3
#> startdate enddate length
#> <date> <date> <int>
#> 1 1990-06-04 1990-06-06 3
#> 2 1990-06-09 1990-06-12 4

创建于 2022-09-30 reprex v2.0.2

关于r - 识别/描述向量中具有特定值的连续几天的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73911595/

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