【问题标题】:How do I convert dates in Quarter-Year (chr) format to Year-Month (date) format?如何将季度(chr)格式的日期转换为年月(日期)格式?
【发布时间】:2021-07-25 09:55:21
【问题描述】:

我正在尝试转换我的 tibble 中当前位于例如2001 年 3 月季度(字符)格式,但我正在尝试将其转换为年月(日期)格式。预期的输出应该是 2001-03-01。

tibble 中有多个日期,所以我不能只重新格式化那个 2001 年 3 月季度。

如果我的措辞令人困惑,我深表歉意,我正在尽力将我的问题用语言表达出来。有人可以帮帮我吗?

【问题讨论】:

标签: r date lubridate


【解决方案1】:

试试这个:

library(tidyr)
library(dplyr)
df %>%
separate(col = quarter, into = c('Month', 'drop', 'Year'), sep = ' ') %>%
mutate(dt = paste(Year, Month, '01', sep = '-')) %>%
mutate(Date = as.Date(dt, format = '%Y-%B-%d')) %>%
select(-drop, -dt, -Month, -Year)

解释:

  • separate 将列拆分为三列,将三个单词分开
  • 创建一个新列“dt”,其中包含年、月和“01”(即日),用破折号分隔
  • 使用 as.Date 从 dt 列创建 Date 列,并将格式指定为全年、全月名称和用破折号分隔的日期
  • 删除仅显示“季度”的列和其他不需要的列

【讨论】:

    【解决方案2】:

    使用最后注释中定义的输入和来自 zoo 的as.yearmon,我们可以将日期转换为 yearmon 对象,然后as.Date 将使用来自 zoo 的 as.Date.yearmon 将其转换为 Date 对象。 frac=1 表示使用该月的最后一天。下面的代码给出了 Date 类输出,这可能是您想要的,但是如果您想要字符类输出,则将格式应用于下面代码的输出,即 format(...) 其中 ... 是下面的代码。

    library(zoo)
    as.Date(as.yearmon(x, "%B quarter %Y"), frac = 1)
    ## [1] "2001-03-31" "2001-06-30" "2001-09-30" "2001-12-31"
    

    注意

    x <- c("March quarter 2001", "June quarter 2001", "September quarter 2001",
      "December quarter 2001")
    

    【讨论】:

      猜你喜欢
      • 2015-04-29
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 2023-01-22
      • 2014-03-01
      相关资源
      最近更新 更多