我有一个数据框a
,我正在尝试将其与数据框b
合并。数据框a
和数据框b
都有一个名为date
的列,它们都是日期类型。 数据框a
中的date
仅包含一周的最后一天,因为数据是pop
的每周摘要。 数据框b
中的date
是单个日期,因为数据是cars
的每日摘要。
由于我想合并a
和b
以对人口的日常汽车进行一些分析,因此我想在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_mod
和b
合并在一起,如下所示
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)