重复行以将日期扩展到周?

  • 本文关键字:扩展到 日期 r
  • 更新时间 :
  • 英文 :


我有一个数据框a,我正在尝试将其与数据框b合并。数据框a和数据框b都有一个名为date的列,它们都是日期类型。 数据框a中的date仅包含一周的最后一天,因为数据是pop的每周摘要。 数据框b中的date是单个日期,因为数据是cars的每日摘要。

由于我想合并ab以对人口的日常汽车进行一些分析,因此我想在a中扩展date列,并为一周中的每一天创建重复的行。

即我从下面的数据框a开始

pop       date 
1   10002 2020-07-12 
2   10025 2020-07-19 
3   10102 2020-07-26 

并将其转换为下面的数据框a_mod

pop       date 
1   10002 2020-07-06
2   10002 2020-07-07 
3   10002 2020-07-08 
4   10002 2020-07-09 
5   10002 2020-07-10 
6   10002 2020-07-11 
7   10002 2020-07-12 
8   10025 2020-07-13 
9   10025 2020-07-14 
...

然后将a_modb合并在一起,如下所示

pop       date cars 
1   10002 2020-07-06  252 
2   10002 2020-07-07   46 
3   10002 2020-07-08   43 
4   10002 2020-07-09   44 

知道我如何实现这一目标吗?我被难住了。

ETA:我后来发现这不是最好的主意,因为我真的只是想将a的值映射到b,而不是用这么多行来炸毁我的数据框。相反,我问了一个不同的问题,得到了一种效果更好的不同技术。感谢所有花时间提供帮助的人!

这里有两种方法(取决于你想怎么走)。

b上使用ceiling_date().

利布雷(润滑剂) 图书馆(德普利尔)

b %>%
mutate(date2 = ceiling_date(date, 
unit = "weeks", 
week_start = 1)) %>% # 1 for Monday, 7 for Sunday
inner_join(a %>% rename(date2 = date)) %>%
select(pop, date, cars)

修改a

library(dplyr)
librray(tidyr)
mod_a <- data.frame(date = seq(min(b$date), max(b$date), by = "days") %>%
left_join(a) %>%
fill(pop, .direction = "updown")
mod_a %>% inner_join(b)

最新更新