将季度/年份格式转换为日期

ags*_*udy 8 r date

我创建了一个函数,它将四分之一年格式的向量强制转换为日期向量.

.quarter_to_date(c("Q1/13","Q2/14"))
[1] "2013-03-01" "2014-06-01"
Run Code Online (Sandbox Code Playgroud)

这是我的功能代码.

.quarter_to_date <-
  function(x){
    ll <- strsplit(gsub('Q([0-9])[/]([0-9]+)','\\1,\\2',x),',')

    res <- lapply(ll,function(x){
      m <- as.numeric(x[1])*3
      m <- ifelse(nchar(m)==1,paste0('0',m),as.character(m))
      as.Date(paste(x[2],m,'01',sep='-'),format='%y-%m-%d')

    })
    do.call(c,res)
  }
Run Code Online (Sandbox Code Playgroud)

我的功能很好但看起来很长而且有点复杂.我认为这应该已经在其他包中完成了(lubridate例如)但是我找不到它.有人可以帮我简化这段代码吗?

G. *_*eck 17

1)动物园包有一个"yearqtr"类.转换为然后转到"Date"类:

library(zoo)
x <- c("Q1/13","Q2/14")

as.Date(as.yearqtr(x, format = "Q%q/%y"))
## [1] "2013-01-01" "2014-04-01"
Run Code Online (Sandbox Code Playgroud)

2)这也适用于获取本月的最后一天而不是第一天:

as.Date(as.yearqtr(x, format = "Q%q/%y"), frac = 1)
## [1] "2013-03-31" "2014-06-30"
Run Code Online (Sandbox Code Playgroud)

3)也考虑不转换为"Date"类,只是"yearqtr"直接使用类:

as.yearqtr(x, format = "Q%q/%y")
## [1] "2013 Q1" "2014 Q2"
Run Code Online (Sandbox Code Playgroud)