Генерация последовательности периодов времени в R в виде строк (нестандартная) - PullRequest
0 голосов
/ 27 марта 2019

У меня есть лист, который принимает только определенный формат для отображения периода год-месяц.

2018M01 означает январь 2018 года
2019M05 означает май 2019 года и т. Д.

Мне нужно указать начальный период и конечный период, затем сгенерировать последовательность дат, совместимую с этим форматом.

Вот пример:

start <- "2015M04" 
end <- "2016M07"

Результат:

[1] "2015M04" "2015M05" "2015M06" "2015M07" "2015M08" "2015M09" [7] "2015M010" "2015M011" "2015M012" "2016M01" "2016M02" "2016M03" [13] "2016M04" "2016M05" "2016M06" "2016M07"

Я попытался выяснить это, выполнив следующее (но у меня кончились идеи, потому что мой период обычно никогда не начинается или не заканчивается с M01 и M12, соответственно

startyear <- 2015

endyear <- 2016

diffyear <- 2016-2015

seq_year <- rep(seq(from = startyear, to = endyear, by = 1), each = 12)

seq_quarters <- rep(seq(from = 1, to = 12, by = 1),  diffyear)

paste0(seq_year, "M","0", seq_quarters)`

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вы можете использовать функцию:

date_seq <- function(start,end) {
  date_vec <- seq.Date(
    from = as.Date(paste0(gsub("M", "-", start),"-01")),
    to   = as.Date(paste0(gsub("M", "-", end),  "-01")),
    by = "m")
  return(format(date_vec, "%YM%m"))
}

date_seq("2015M04" ,"2019M08")
2 голосов
/ 28 марта 2019

делает эту работу:

start <- "2015M04" 
end <- "2016M07"


date_vec <- seq.Date(
         from = as.Date(paste0(gsub("M", "-", start),"-01")),
         to   = as.Date(paste0(gsub("M", "-", end),  "-01")),
         by = "m")

format(date_vec, "%YM%m")
     [1] "2015M04" "2015M05" "2015M06" "2015M07" "2015M08" "2015M09" "2015M10" "2015M11" "2015M12" "2016M01" "2016M02" "2016M03"
[13] "2016M04" "2016M05" "2016M06" "2016M07"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...