将日期格式化为新的“年/季度”列

时间:2019-07-08 22:19:21

标签: r date

我有一个这种格式的日期框架。

Timestamp  variation_id  
 5-Aug-16       A
 6-Aug-16       A
11-Aug-16       A

我想创建一个新列,根据“时间戳”列确定它是哪一季度,并使它看起来像这样。

Timestamp  variation_id  Quarter
 5-Aug-16       A        2016 Q3
 6-Aug-16       A        2016 Q3
11-Aug-16       A        2016 Q3

这是我到目前为止编写的代码,它创建了新列,但其中仅包含NA ...

df$Timestamp <- as.yearqtr(df$Timestamp, format = "%dd-%mmm-YY%"

我该如何使用它?有更容易的方法吗?感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

这应该是所有必需的:

df <- data.frame(date = c("5-Aug-16", "6-Aug-16", "2-Jan-16"), 
                                 variation_id = "A",
                                 stringsAsFactors = FALSE)

as.yearqtr(as.Date(df$date,"%d-%b-%y"))

或者看起来您可以直接在字符上使用as.yearqtr

as.yearqtr(df$date,"%d-%b-%y")

请注意我如何在as.Date中指定格式,并阅读?strptime,以了解格式符号的工作原理。

答案 1 :(得分:0)

我会考虑分部分执行此操作,即:

require(tidyverse)

df <- data.frame(date = c("5-Aug-16", "6-Aug-16", "2-Jan-16"), 
                 variation_id = "A")

df %>% 
  mutate(fmtdate = lubridate::month(lubridate::dmy(date)),
         q = cut(fmtdate, breaks = c(-1, 3, 6, 9, 12), labels = c("Q1", "Q2", "Q3", "Q4")),
         Quarter = str_c(lubridate::year(lubridate::dmy(date)), " ", q)) %>% 
  select(date, variation_id, Quarter)

#       date     variation_id     Quarter
# 1 5-Aug-16                A     2016 Q3
# 2 6-Aug-16                A     2016 Q3
# 3 2-Jan-16                A     2016 Q1

也许有人可以帮助您找到一个比这个更优雅的解决方案,但这是我目前能做的最好的!