1

I want to make a Date sequence from 2010-04-01 to 2040-03-01, and express the date format to be "April-2010", or "Apr 2010". However, when I used as.yearmon() it only returned "4 2010" instead of "Apr 2010".

This is my first code which I tried to convert "2010-04-01" to the format of "Apr 2010", but the result of the code was "4 2010".

as.yearmon("2010-04-01", format = "%Y-%m-%d")

Also, I tried to make a sequence, but there happened an error (Error in del/by : non-numeric argument to binary operator)

seq(as.yearmon("2010-04-01"), as.yearmon("2040-03-01"), by = "1 month")

To sum up, I would like to make a sequence like below. Could you help me how can I do this?

"Apr 2010", "May 2010", "Jun 2010", ... , "Mar 2040"

4 Answers4

2

We could use format:

# example dates
dates <- seq(as.Date("2023-03-01"), as.Date("2023-12-01"), by = "month")


format(dates, "%b %Y")
# or
format(dates, "%B-%Y")
[1] "Mrz 2023" "Apr 2023" "Mai 2023" "Jun 2023" "Jul 2023" "Aug 2023" "Sep 2023" "Okt 2023" "Nov 2023" "Dez 2023"

 [1] "März-2023"      "April-2023"     "Mai-2023"       "Juni-2023"      "Juli-2023"      "August-2023"    "September-2023" "Oktober-2023"  
 [9] "November-2023"  "Dezember-2023"
TarJae
  • 72,363
  • 6
  • 19
  • 66
1

You could first convert the start and end date to a date format using as.Date and then convert the sequence to your desired format using as.yearmon like this:

library(zoo)
as.yearmon(seq(as.Date("2010-04-01"), as.Date("2040-03-01"), by = "1 month"))
#>   [1] "Apr 2010" "May 2010" "Jun 2010" "Jul 2010" "Aug 2010" "Sep 2010"
#>   [7] "Oct 2010" "Nov 2010" "Dec 2010" "Jan 2011" "Feb 2011" "Mar 2011"
#>  [13] "Apr 2011" "May 2011" "Jun 2011" "Jul 2011" "Aug 2011" "Sep 2011"
#>  [19] "Oct 2011" "Nov 2011" "Dec 2011" "Jan 2012" "Feb 2012" "Mar 2012"
#>  [25] "Apr 2012" "May 2012" "Jun 2012" "Jul 2012" "Aug 2012" "Sep 2012"
#>  [31] "Oct 2012" "Nov 2012" "Dec 2012" "Jan 2013" "Feb 2013" "Mar 2013"
#>  [37] "Apr 2013" "May 2013" "Jun 2013" "Jul 2013" "Aug 2013" "Sep 2013"
#>  [43] "Oct 2013" "Nov 2013" "Dec 2013" "Jan 2014" "Feb 2014" "Mar 2014"
#>  [49] "Apr 2014" "May 2014" "Jun 2014" "Jul 2014" "Aug 2014" "Sep 2014"
#>  [55] "Oct 2014" "Nov 2014" "Dec 2014" "Jan 2015" "Feb 2015" "Mar 2015"
#>  [61] "Apr 2015" "May 2015" "Jun 2015" "Jul 2015" "Aug 2015" "Sep 2015"
#>  [67] "Oct 2015" "Nov 2015" "Dec 2015" "Jan 2016" "Feb 2016" "Mar 2016"
#>  [73] "Apr 2016" "May 2016" "Jun 2016" "Jul 2016" "Aug 2016" "Sep 2016"
#>  [79] "Oct 2016" "Nov 2016" "Dec 2016" "Jan 2017" "Feb 2017" "Mar 2017"
#>  [85] "Apr 2017" "May 2017" "Jun 2017" "Jul 2017" "Aug 2017" "Sep 2017"
#>  [91] "Oct 2017" "Nov 2017" "Dec 2017" "Jan 2018" "Feb 2018" "Mar 2018"
#>  [97] "Apr 2018" "May 2018" "Jun 2018" "Jul 2018" "Aug 2018" "Sep 2018"
#> [103] "Oct 2018" "Nov 2018" "Dec 2018" "Jan 2019" "Feb 2019" "Mar 2019"
#> [109] "Apr 2019" "May 2019" "Jun 2019" "Jul 2019" "Aug 2019" "Sep 2019"
#> [115] "Oct 2019" "Nov 2019" "Dec 2019" "Jan 2020" "Feb 2020" "Mar 2020"
#> [121] "Apr 2020" "May 2020" "Jun 2020" "Jul 2020" "Aug 2020" "Sep 2020"
#> [127] "Oct 2020" "Nov 2020" "Dec 2020" "Jan 2021" "Feb 2021" "Mar 2021"
#> [133] "Apr 2021" "May 2021" "Jun 2021" "Jul 2021" "Aug 2021" "Sep 2021"
#> [139] "Oct 2021" "Nov 2021" "Dec 2021" "Jan 2022" "Feb 2022" "Mar 2022"
#> [145] "Apr 2022" "May 2022" "Jun 2022" "Jul 2022" "Aug 2022" "Sep 2022"
#> [151] "Oct 2022" "Nov 2022" "Dec 2022" "Jan 2023" "Feb 2023" "Mar 2023"
#> [157] "Apr 2023" "May 2023" "Jun 2023" "Jul 2023" "Aug 2023" "Sep 2023"
#> [163] "Oct 2023" "Nov 2023" "Dec 2023" "Jan 2024" "Feb 2024" "Mar 2024"
#> [169] "Apr 2024" "May 2024" "Jun 2024" "Jul 2024" "Aug 2024" "Sep 2024"
#> [175] "Oct 2024" "Nov 2024" "Dec 2024" "Jan 2025" "Feb 2025" "Mar 2025"
#> [181] "Apr 2025" "May 2025" "Jun 2025" "Jul 2025" "Aug 2025" "Sep 2025"
#> [187] "Oct 2025" "Nov 2025" "Dec 2025" "Jan 2026" "Feb 2026" "Mar 2026"
#> [193] "Apr 2026" "May 2026" "Jun 2026" "Jul 2026" "Aug 2026" "Sep 2026"
#> [199] "Oct 2026" "Nov 2026" "Dec 2026" "Jan 2027" "Feb 2027" "Mar 2027"
#> [205] "Apr 2027" "May 2027" "Jun 2027" "Jul 2027" "Aug 2027" "Sep 2027"
#> [211] "Oct 2027" "Nov 2027" "Dec 2027" "Jan 2028" "Feb 2028" "Mar 2028"
#> [217] "Apr 2028" "May 2028" "Jun 2028" "Jul 2028" "Aug 2028" "Sep 2028"
#> [223] "Oct 2028" "Nov 2028" "Dec 2028" "Jan 2029" "Feb 2029" "Mar 2029"
#> [229] "Apr 2029" "May 2029" "Jun 2029" "Jul 2029" "Aug 2029" "Sep 2029"
#> [235] "Oct 2029" "Nov 2029" "Dec 2029" "Jan 2030" "Feb 2030" "Mar 2030"
#> [241] "Apr 2030" "May 2030" "Jun 2030" "Jul 2030" "Aug 2030" "Sep 2030"
#> [247] "Oct 2030" "Nov 2030" "Dec 2030" "Jan 2031" "Feb 2031" "Mar 2031"
#> [253] "Apr 2031" "May 2031" "Jun 2031" "Jul 2031" "Aug 2031" "Sep 2031"
#> [259] "Oct 2031" "Nov 2031" "Dec 2031" "Jan 2032" "Feb 2032" "Mar 2032"
#> [265] "Apr 2032" "May 2032" "Jun 2032" "Jul 2032" "Aug 2032" "Sep 2032"
#> [271] "Oct 2032" "Nov 2032" "Dec 2032" "Jan 2033" "Feb 2033" "Mar 2033"
#> [277] "Apr 2033" "May 2033" "Jun 2033" "Jul 2033" "Aug 2033" "Sep 2033"
#> [283] "Oct 2033" "Nov 2033" "Dec 2033" "Jan 2034" "Feb 2034" "Mar 2034"
#> [289] "Apr 2034" "May 2034" "Jun 2034" "Jul 2034" "Aug 2034" "Sep 2034"
#> [295] "Oct 2034" "Nov 2034" "Dec 2034" "Jan 2035" "Feb 2035" "Mar 2035"
#> [301] "Apr 2035" "May 2035" "Jun 2035" "Jul 2035" "Aug 2035" "Sep 2035"
#> [307] "Oct 2035" "Nov 2035" "Dec 2035" "Jan 2036" "Feb 2036" "Mar 2036"
#> [313] "Apr 2036" "May 2036" "Jun 2036" "Jul 2036" "Aug 2036" "Sep 2036"
#> [319] "Oct 2036" "Nov 2036" "Dec 2036" "Jan 2037" "Feb 2037" "Mar 2037"
#> [325] "Apr 2037" "May 2037" "Jun 2037" "Jul 2037" "Aug 2037" "Sep 2037"
#> [331] "Oct 2037" "Nov 2037" "Dec 2037" "Jan 2038" "Feb 2038" "Mar 2038"
#> [337] "Apr 2038" "May 2038" "Jun 2038" "Jul 2038" "Aug 2038" "Sep 2038"
#> [343] "Oct 2038" "Nov 2038" "Dec 2038" "Jan 2039" "Feb 2039" "Mar 2039"
#> [349] "Apr 2039" "May 2039" "Jun 2039" "Jul 2039" "Aug 2039" "Sep 2039"
#> [355] "Oct 2039" "Nov 2039" "Dec 2039" "Jan 2040" "Feb 2040" "Mar 2040"

Created on 2023-03-24 with reprex v2.0.2

Quinten
  • 35,235
  • 5
  • 20
  • 53
0

The seq command in the question would work if by="1 month" was replaced with by=1/12. This has the advantage over character strings that result is a yearmon object which can be sorted, manipulated (e.g. adding 1/12 gives next month, etc.) and doesn't require an explicit intermediate conversion to Date. Realize that yearmon objects, internally, are year plus fraction where fraction is 0, 1/12, 2/12, ..., 11/12 for the 12 months of the year so:

library(zoo)

seq(as.yearmon("2010-04-01"), as.yearmon("2040-03-01"), by = 1/12)
##   [1] "Apr 2010" "May 2010" "Jun 2010" "Jul 2010" "Aug 2010" "Sep 2010"
##   [7] "Oct 2010" "Nov 2010" "Dec 2010" "Jan 2011" "Feb 2011" "Mar 2011"
##  [13] "Apr 2011" "May 2011" "Jun 2011" "Jul 2011" "Aug 2011" "Sep 2011"
## ...snip...
## [343] "Oct 2038" "Nov 2038" "Dec 2038" "Jan 2039" "Feb 2039" "Mar 2039"
## [349] "Apr 2039" "May 2039" "Jun 2039" "Jul 2039" "Aug 2039" "Sep 2039"
## [355] "Oct 2039" "Nov 2039" "Dec 2039" "Jan 2040" "Feb 2040" "Mar 2040"

The -01 is not actually needed so it could also be written:

seq(as.yearmon("2010-04"), as.yearmon("2040-03"), by = 1/12)
G. Grothendieck
  • 254,981
  • 17
  • 203
  • 341
0

You can use time_seq() from my package timeplyr for monthly breaks with more flexible start dates. It also has no issue with mixing dates and datetimes.

# remotes::install_github("NicChr/timeplyr") 
library(timeplyr)
time_seq("2023-03-01", "2023-12-01", by = "month")
#>  [1] "2023-03-01" "2023-04-01" "2023-05-01" "2023-06-01" "2023-07-01"
#>  [6] "2023-08-01" "2023-09-01" "2023-10-01" "2023-11-01" "2023-12-01"
library(zoo)
as.yearmon(time_seq("2023-03-01", "2023-12-01", by = "month"))
#>  [1] "Mar 2023" "Apr 2023" "May 2023" "Jun 2023" "Jul 2023" "Aug 2023"
#>  [7] "Sep 2023" "Oct 2023" "Nov 2023" "Dec 2023"

time_seq("2023-03-31", "2023-12-01", by = "month") # This works
#> [1] "2023-03-31" "2023-04-30" "2023-05-31" "2023-06-30" "2023-07-31"
#> [6] "2023-08-31" "2023-09-30" "2023-10-31" "2023-11-30"
seq(as.Date("2023-03-31"), as.Date("2023-12-01"), by = "month") # This doesn't
#> [1] "2023-03-31" "2023-05-01" "2023-05-31" "2023-07-01" "2023-07-31"
#> [6] "2023-08-31" "2023-10-01" "2023-10-31" "2023-12-01"

Created on 2023-03-24 with reprex v2.0.2

NicChr
  • 858
  • 1
  • 9