R:按日期依次扩展和填充数据框

时间:2019-01-25 23:26:06

标签: r dplyr

我有原始数据框:

igroup=c("A", "B", "C")
demo_df=data.frame(date=c("2018-11-28", "2018-12-17", "2019-01-23"), group)

原始数据框:

      date   group
1 2018-11-28     A
2 2018-12-17     B
3 2019-01-23     C

我想要一个数据框,该数据框将日期扩展到下一个列,但仍保留组信息。例如,日期2018-11-28至2018-12-16位于A组,日期2018-12-17至2019-01-22位于B组,而2019-01-23位于C组。 / p>

这是我想要的输出(result_df):

time=c(seq(as.Date("2018-11-28"), as.Date("2018-12-17")-1, by=1), 
seq(as.Date("2018-12-17"), as.Date("2019-01-23")-1, by=1),as.Date("2019-01-23") )
group1=c(rep("A",as.numeric(as.Date("2018-12-17")-as.Date("2018-11-28"))), 
rep("B",as.numeric(as.Date("2019-01-23")-as.Date("2018-12-17"))), "C" )
result_df=data.frame(time,group1 )
result_df

我想知道是否有任何更有效的方法(使用dplyr)来解决此问题。

先谢谢了。

1 个答案:

答案 0 :(得分:1)

首先,确保将date存储为日期对象:

demo_df$date <- as.Date(demo_df$date, format = "%Y-%m-%d")

然后使用tidyverse,我们首先complete序列,然后fill向下分组:

library(tidyverse)

demo_df %>% complete(date = seq.Date(min(date), max(date), by = "day")) %>% 
 fill(igroup)