【问题标题】:Formatting Date to a new Year / quarter column将日期格式化为新的年/季度列
【发布时间】:2019-11-18 10:57:06
【问题描述】:

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

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

我想创建一个新列,根据 Timestamp 列确定它是一年中的哪个季度,并让它看起来像这样..

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

这是我迄今为止编写的代码,它创建了新列,但其中只有 NAs...

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

我怎样才能让它工作?有没有更简单的方法?感谢任何帮助!

【问题讨论】:

  • as.yearqtr 来自哪里?它在“动物园”包中吗?

标签: r date


【解决方案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 以了解格式符号的工作原理。

【讨论】:

  • as.yearqtr 已经有一个 format 参数。试试as.yearqtr(df$date,"%d-%b-%y")——即省略as.Date
【解决方案2】:

我会考虑分部分做,即:

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

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

【讨论】:

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