创建日期 df 以传递给 purrr 函数

Creating a df of dates to pass onto a purrr function

我正在尝试创建一个包含 2 列 start_dateend_datetbl_df。每行在 start_dateend_date 之间会有 6 天。我想使用每一行的 start_dateend_date 值来使用 purrr::map 馈入抓取函数。

# example tbl_df
df <- tibble::tribble(
  ~start_date,   ~end_date,
   "6/1/2019",  "6/7/2019",
   "6/8/2019", "6/14/2019"
  )

df
#> # A tibble: 2 x 2
#>   start_date end_date 
#>   <chr>      <chr>    
#> 1 6/1/2019   6/7/2019 
#> 2 6/8/2019   6/14/2019

我尝试绑定2个向量,但它们的长度通常不均匀。有没有更好的方法来解决这个问题?我也不确定 purrr 是否会接受日期作为参数值。

library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#> 
#>     date


start_date <- lubridate::ymd("2019-06-01")
end_date <- lubridate::ymd("2019-08-01")

start_dates <- seq(start_date, end_date, by = "1 week" )
end_dates <- seq (lubridate::ymd("2019-06-07"), end_date, by = "1 week")

reprex package (v0.3.0)

于 2020-02-07 创建

示例函数为:

scrape_function <- function(start_date, end_date) {

url <- glue::glue("http://www.example.com/start_date={start_date}&end_date={end_date}")

# scrape data and return df

df
}

此外,我如何使用 start_dateend_date 值通过 safely 传递给 purrr::map2dfr

我认为网络抓取代码混淆了这个问题。只是您想将一个时间段分成 7 天的块吗?或许这个

start_date <- lubridate::ymd("2019-06-01")
end_date <- lubridate::ymd("2019-08-01")

split_weeks <- function(start_date, end_date){
    df <- tibble::tribble(
        ~start_date,   ~end_date,
        start_date,  start_date + 6)
    interim_end_date <- start_date + 6
    while(interim_end_date < end_date){
        df <- df %>% tibble::add_row(start_date=interim_end_date + 1, 
                                     end_date=interim_end_date + 7)
        interim_end_date <- interim_end_date + 7
    }
    return(df)
}

split_weeks(start_date, end_date)
#> # A tibble: 9 x 2
#>   start_date end_date  
#>   <date>     <date>    
#> 1 2019-06-01 2019-06-07
#> 2 2019-06-08 2019-06-14
#> 3 2019-06-15 2019-06-21
#> 4 2019-06-22 2019-06-28
#> 5 2019-06-29 2019-07-05
#> 6 2019-07-06 2019-07-12
#> 7 2019-07-13 2019-07-19
#> 8 2019-07-20 2019-07-26
#> 9 2019-07-27 2019-08-02

或者修改您的代码以提供等长的向量

start_dates <- seq(start_date, end_date, by = "1 week" )
end_dates <- seq(lubridate::ymd("2019-06-07"), by = "1 week",
    length.out=length(start_dates))