#r #date #datetime #sequence #lubridate
#r #Дата #дата и время #последовательность #lubridate
Вопрос:
Я пытаюсь сгенерировать вектор для пакета импорта api, который принимает следующие аргументы
date.from
Start date in YYYY-MM-DD.
date.to
End date in YYYY-MM-DD.
Поскольку диапазон дат довольно большой, и я пытаюсь получить данные без выборки, я должен разделить запрос на меньшие, в противном случае я получаю ошибку 400 и совет попробовать меньший диапазон дат.
Мой код выглядит следующим образом:
library(lubridate)
today <- Sys.Date()
start_date <- seq(as.Date("2013-01-01"), as.Date(today), by = "months")
end_date <- seq(as.Date("2013-02-01"), as.Date(today), by = "months")-1
В результате получается 2 набора дат для начальной и конечной дат каждый, однако набор с начальной датой имеет 1-й день текущего месяца, но конечная дата ничего не имеет, потому что текущий месяц не завершен (сегодня 2020-09-12)
> start_date
[1] "2013-01-01" "2013-02-01" "2013-03-01" "2013-04-01" "2013-05-01" "2013-06-01" "2013-07-01"
[8] "2013-08-01" "2013-09-01" "2013-10-01" "2013-11-01" "2013-12-01" "2014-01-01" "2014-02-01"
[15] "2014-03-01" "2014-04-01" "2014-05-01" "2014-06-01" "2014-07-01" "2014-08-01" "2014-09-01"
[22] "2014-10-01" "2014-11-01" "2014-12-01" "2015-01-01" "2015-02-01" "2015-03-01" "2015-04-01"
[29] "2015-05-01" "2015-06-01" "2015-07-01" "2015-08-01" "2015-09-01" "2015-10-01" "2015-11-01"
[36] "2015-12-01" "2016-01-01" "2016-02-01" "2016-03-01" "2016-04-01" "2016-05-01" "2016-06-01"
[43] "2016-07-01" "2016-08-01" "2016-09-01" "2016-10-01" "2016-11-01" "2016-12-01" "2017-01-01"
[50] "2017-02-01" "2017-03-01" "2017-04-01" "2017-05-01" "2017-06-01" "2017-07-01" "2017-08-01"
[57] "2017-09-01" "2017-10-01" "2017-11-01" "2017-12-01" "2018-01-01" "2018-02-01" "2018-03-01"
[64] "2018-04-01" "2018-05-01" "2018-06-01" "2018-07-01" "2018-08-01" "2018-09-01" "2018-10-01"
[71] "2018-11-01" "2018-12-01" "2019-01-01" "2019-02-01" "2019-03-01" "2019-04-01" "2019-05-01"
[78] "2019-06-01" "2019-07-01" "2019-08-01" "2019-09-01" "2019-10-01" "2019-11-01" "2019-12-01"
[85] "2020-01-01" "2020-02-01" "2020-03-01" "2020-04-01" "2020-05-01" "2020-06-01" "2020-07-01"
[92] "2020-08-01" "2020-09-01"
> end_date
[1] "2013-01-30" "2013-03-02" "2013-03-30" "2013-04-30" "2013-05-30" "2013-06-30" "2013-07-30"
[8] "2013-08-30" "2013-09-30" "2013-10-30" "2013-11-30" "2013-12-30" "2014-01-30" "2014-03-02"
[15] "2014-03-30" "2014-04-30" "2014-05-30" "2014-06-30" "2014-07-30" "2014-08-30" "2014-09-30"
[22] "2014-10-30" "2014-11-30" "2014-12-30" "2015-01-30" "2015-03-02" "2015-03-30" "2015-04-30"
[29] "2015-05-30" "2015-06-30" "2015-07-30" "2015-08-30" "2015-09-30" "2015-10-30" "2015-11-30"
[36] "2015-12-30" "2016-01-30" "2016-03-01" "2016-03-30" "2016-04-30" "2016-05-30" "2016-06-30"
[43] "2016-07-30" "2016-08-30" "2016-09-30" "2016-10-30" "2016-11-30" "2016-12-30" "2017-01-30"
[50] "2017-03-02" "2017-03-30" "2017-04-30" "2017-05-30" "2017-06-30" "2017-07-30" "2017-08-30"
[57] "2017-09-30" "2017-10-30" "2017-11-30" "2017-12-30" "2018-01-30" "2018-03-02" "2018-03-30"
[64] "2018-04-30" "2018-05-30" "2018-06-30" "2018-07-30" "2018-08-30" "2018-09-30" "2018-10-30"
[71] "2018-11-30" "2018-12-30" "2019-01-30" "2019-03-02" "2019-03-30" "2019-04-30" "2019-05-30"
[78] "2019-06-30" "2019-07-30" "2019-08-30" "2019-09-30" "2019-10-30" "2019-11-30" "2019-12-30"
[85] "2020-01-30" "2020-03-01" "2020-03-30" "2020-04-30" "2020-05-30" "2020-06-30" "2020-07-30"
[92] "2020-08-30"
Который я позже передаю через цикл следующим образом:
metrika_sources <- list()
for (i in 1:length(start_date)) {
for (j in 1:length(end_date)) {
rym_sources <-
rym_get_data(
counters = "******",
date.from = start_date[i],
date.to = end_date[j],
dimensions = "ym:s:date,ym:s:lastTrafficSource,ym:s:lastSourceEngine,ym:s:deviceCategory,ym:s:UTMSource,ym:s:UTMMedium,ym:s:UTMCampaign",
metrics = "ym:s:visits,ym:s:pageviews,ym:s:users,ym:s:bounceRate,ym:s:pageDepth,ym:s:avgVisitDurationSeconds,ym:s:productPurchasedQuantity",
sort = "-ym:s:date",
login = "******",
token.path = "*****",
accuracy = "full",
)
}
}
Есть ли способ завершить последовательность сегодняшней или вчерашней датой?
Спасибо за помощь
Ответ №1:
Возможно, вы могли бы добавить today
и today - 1
к начальной и конечной дате соответственно.
today <- Sys.Date()
start_date <- c(start_date, today)
end_date <- c(end_date, today - 1)
Комментарии:
1. Вы MVP и гений, сэр! Я немного отредактировал ваш код следующим образом
start_date <- seq(as.Date("2013-01-01"), as.Date(today), by = "months") end_date <- seq(as.Date("2013-02-01"), as.Date(today), by = "months")-1 start_date <- c(start_date) end_date <- c(end_date, today)
, в результате чего получилось 2 аккуратных и равномерно установленных последовательности дат по 93 даты в каждой. Но, к сожалению, цикл по-прежнему возвращает ошибку 400:(2. К сожалению, я не знаю, почему / как возникла ошибка 400. Я попытался ответить на вопрос
to make the sequence finish with the today's or yesterday's date?
.3. Да, я дополнительно адресовал вопрос сопровождающему пакета, так что ваш ответ действительно помог!