创建日期 df 以传递给 purrr 函数
Creating a df of dates to pass onto a purrr function
我正在尝试创建一个包含 2 列 start_date
和 end_date
的 tbl_df
。每行在 start_date
和 end_date
之间会有 6 天。我想使用每一行的 start_date
和 end_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_date
和 end_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))
我正在尝试创建一个包含 2 列 start_date
和 end_date
的 tbl_df
。每行在 start_date
和 end_date
之间会有 6 天。我想使用每一行的 start_date
和 end_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_date
和 end_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))