如何根据 R 中列中的唯一值将日期时间段数据拆分为月年

问题描述 投票:0回答:1

我有一系列在不同时期部署的接收器。数据集如下所示:

接收器 开始_dt 结束_dt
1 2021-05-19 15:43:00 2022-06-19 12:43:00
2 2021-08-19 15:43:00 2022-05-10 18:43:00
3 2021-12-19 15:43:00 2022-06-19 12:43:00

我想提取每个接收器在开始日期和结束日期内部署的每个月年,以便每个接收器链接到其各自活跃的月年。这是我想要实现的目标的一个例子:

接收器 月年
1 2021-05
1 2021-06
1 2021-07
1 2021-08
1 2021-09
1 2021-10
1 2021-11
1 2021-12
1 2022-01
1 2022-01
1 2022-02
1 2022-03
1 2022-04
1 2022-05
1 2022-06
2 2021-08
2 2021-09
2 2021-10
2 2021-11
2 2021-12
2 2022-01
2 2022-02
2 2022-03
2 2022-04
2 2022-05
3 2021-12
3 2022-01
3 2022-02
3 2022-03
3 2022-04
3 2022-05
3 2022-06

我不确定 lubridate 是否是最好的选择?在我看来,它似乎相对简单,但我似乎无法让它与它一起工作或使用堆栈上的其他示例。

感谢您的帮助。

r datetime dplyr lubridate period
1个回答
0
投票
library(lubridate); library(dplyr)
df |>
  mutate(across(ends_with("dt"), ~floor_date(as_date(ymd_hms(.)), "month"))) |>
  reframe(monthyear = seq.Date(start_dt, end_dt, "month"), .by = Receiver)

结果

   Receiver  monthyear
1         1 2021-05-01
2         1 2021-06-01
3         1 2021-07-01
4         1 2021-08-01
5         1 2021-09-01
6         1 2021-10-01
7         1 2021-11-01
8         1 2021-12-01
9         1 2022-01-01
10        1 2022-02-01
11        1 2022-03-01
12        1 2022-04-01
13        1 2022-05-01
14        1 2022-06-01
15        2 2021-08-01
16        2 2021-09-01
17        2 2021-10-01
18        2 2021-11-01
19        2 2021-12-01
20        2 2022-01-01
21        2 2022-02-01
22        2 2022-03-01
23        2 2022-04-01
24        2 2022-05-01
25        3 2021-12-01
26        3 2022-01-01
27        3 2022-02-01
28        3 2022-03-01
29        3 2022-04-01
30        3 2022-05-01
31        3 2022-06-01

      
© www.soinside.com 2019 - 2024. All rights reserved.