我有一个这种格式的日期框架。
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%"
我该如何使用它?有更容易的方法吗?感谢任何帮助!
答案 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
也许有人可以帮助您找到一个比这个更优雅的解决方案,但这是我目前能做的最好的!