问题描述
我正在使用sqldf库来处理R中的数据框。目前,我有这样的数据框:
ID Start_Date End_Date
1 08-29 09-01
我想使用sqldf创建一个新的数据框,以在Start_Date和End_Date之间创建一个日期范围,例如,对于ID1,我希望最终的数据框如下所示:
ID Date_Range
1 08-29
1 08-30
1 08-31
1 09-01
我想我可以创建一个新的数据框。但是我想知道是否可以在sqldf中实现?
解决方法
这是使用tidyverse
函数扩展日期范围的一种方法。
library(dplyr)
df %>%
mutate(across(ends_with('Date'),as.Date,'%m-%d'),#You don't need the above if columns are already of type date/POSIXct
Date_Range = purrr::map2(Start_Date,End_Date,seq,by = '1 day')) %>%
tidyr::unnest(Date_Range) %>%
mutate(Date_Range = format(Date_Range,'%m-%d')) %>%
select(-Start_Date,-End_Date)
# ID Date_Range
# <int> <chr>
#1 1 08-29
#2 1 08-30
#3 1 08-31
#4 1 09-01
数据
df <- structure(list(ID = 1L,Start_Date = "08-29",End_Date = "09-01"),class = "data.frame",row.names = c(NA,-1L))