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

标签 r date

我创建了一个函数,将季度年格式的向量强制转换为日期向量。

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

这是我的函数的代码。

.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)
  }

我的函数运行良好,但看起来很长并且有点复杂。我认为这应该已经在其他包中完成(例如 lubridate )但我找不到它。有人可以帮我简化这段代码吗?

最佳答案

1) Zoo 包有一个 "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"

2) 或者使用它来获取季度的最后一天而不是第一天:

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

3) 还可以考虑根本不转换为 "Date" 类,而直接使用 "yearqtr" 类:

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

关于r - 将季度/年份格式转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31071733/

相关文章:

json - 如何将文件中的 json 条目转换为数据框?

R - 如何将 ifelse(str_detect ...) 的输出应用于整个组

android - Mongoose 时间戳和纪元转换为 Date() 的问题

javascript - 创建一个依赖于当前时间的 mongo View

r - 通过变量拆分 data.frame

r - Tornado 图/ggplot2 图表

r - 如何将 "patch"应用于 data.frame?

javascript - moment.js 被添加到数组中

mongodb - 按日、月、年获取不同的 ISO 日期

Python .split 索引错误