在给定开始日期和结束日期的情况下,如何创建日期范围

问题描述

我正在使用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))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...