我正在使用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中实现?
答案 0 :(得分:0)
这是使用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))