【问题标题】:Convert character field to quarter date in R在R中将字符字段转换为季度日期
【发布时间】:2017-09-14 22:05:21
【问题描述】:

我有一个 tsv,其中有一个季度格式的日期字段(名为“trim”)

 trim
 1992-4
 1993-1
 ...

当我将文件加载为数据框时,R 将该字段作为字符导入。

我无法转换它,我只能得到 NA,即使我尝试:

 df$trim <- as.Date(df$trim, format="%Y-%q")

或加载 zoo 包并发送此命令:

as.yearqtr(df$trim, format="%Y-%q")

有什么想法吗?

【问题讨论】:

  • %q 不是?strptime 中列出的格式。我认为您不能存储年-季度日期对象。但是,将它存储为一个因子应该没问题,因为它的生成方式仍然会根据需要进行排序。
  • @Benjamin 使用zoo 包,您可以将年-季度对象存储为yearqtr。但格式为YYYY Qx
  • 我的立场是正确的。虽然,根据?zoo::yearqtr 的文档,似乎没有一种直接的方法可以将这些字符串转换为yearqtr 对象。

标签: r


【解决方案1】:

这会将字符串转换为"yearqtr" 类和"Date" 类(第一季度)和"Date" 类(最后一个季度):

library(zoo)

as.yearqtr("1992-4")
## [1] "1992 Q4"

as.Date(as.yearqtr("1992-4"))
## [1] "1992-10-01"

as.Date(as.yearqtr("1992-4"), frac = 1)
## [1] "1992-12-31"

注意 zoo 有 scale_x_yearqtr 用于定义适合 "yearqtr" 类的 ggplot2 X 轴。

【讨论】:

    【解决方案2】:

    如果您坚持使用基本 R as.Date() 函数,那么您可以考虑的一个选项是将季度映射到月份。在下面的代码中,我将季度映射到该季度发生的第一个月。然后我在该月的第一天标记"01",然后转换为日期。

    trim <- c("1992-4", "1993-1")
    
    trim <- gsub("-1", "-01", trim)       # map first quarter to January
    trim <- gsub("-2", "-04", trim)       # map second quarter to April
    trim <- gsub("-3", "-07", trim)       # map third quarter to July
    trim <- gsub("-4", "-10", trim)       # map fourth quarter October
    
    trim <- paste(trim, "-01", sep="")    # add first day of the month
    
    trim <- as.Date(trim, "%Y-%m-%d")     # convert to date
    
    > trim
    [1] "1992-10-01" "1993-01-01"
    

    附:这个问题有点像this SO post 的重复。但它的不同足以值得 IMO 一个新的答案。

    【讨论】:

    • 谢谢,所以我不能使用季度格式日期来绘制一些东西。使用 ggplot2 我必须在比例和标签上工作
    • 查看@Pascal 的评论 ... baseR 没有四分之一日期对象,尽管其他包(例如 zoo)可能有这个。
    【解决方案3】:

    您可以使用润滑。 可以使用 tidyverse 加载。

    library(tidyverse)
    yq('1992-4')
    str(yq('1992-4'))
    
    parse_date_time('1992-4',orders = "Yq")
    parse_date_time('1992-4',orders = "%Y%q")
    
    [1] "1992-10-01"
    Date[1:1], format: "1992-10-01"
    [1] "1992-10-01 UTC"
    [1] "1992-10-01 UTC"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 2022-06-30
      • 2018-09-21
      • 2021-07-26
      • 2022-11-09
      • 1970-01-01
      相关资源
      最近更新 更多