【发布时间】:2023-01-22 23:41:12
【问题描述】:
我有 %Y-%m-%d 格式的 Time,如何创建 Quarter 以获取:
Time | Quarter
2018-01-31 | 2018 Q1
2018-02-28 | 2018 Q1
2018-03-31 | 2018 Q1
2018-04-30 | 2018 Q2
2018-05-31 | 2018 Q2
2018-06-30 | 2018 Q2
【问题讨论】:
我有 %Y-%m-%d 格式的 Time,如何创建 Quarter 以获取:
Time | Quarter
2018-01-31 | 2018 Q1
2018-02-28 | 2018 Q1
2018-03-31 | 2018 Q1
2018-04-30 | 2018 Q2
2018-05-31 | 2018 Q2
2018-06-30 | 2018 Q2
【问题讨论】:
zoo 包有一个年季度类,因此您可以用这种方式打印日期,但它仍然被识别为绘图等的时间值。如果您转换为字符,它就会丢失。
df$Quarter <- zoo::as.yearqtr(as.Date(df$Time))
df
#> Time Quarter
#> 1 2018-01-31 2018 Q1
#> 2 2018-02-28 2018 Q1
#> 3 2018-03-31 2018 Q1
#> 4 2018-04-30 2018 Q2
#> 5 2018-05-31 2018 Q2
#> 6 2018-06-30 2018 Q2
【讨论】:
as.yearqtr(df$Time) 可以。不需要as.Date。
我们可以通过使用 lubridates ymd 和 year 函数结合基本 Rs quarters 函数来实现这一点:
library(lubridate)
library(dplyr)
df %>%
mutate(Time = ymd(Time),
Quarter = paste(year(Time), quarters(Time)))
Time Quarter
1 2018-01-31 2018 Q1
2 2018-02-28 2018 Q1
3 2018-03-31 2018 Q1
4 2018-04-30 2018 Q2
5 2018-05-31 2018 Q2
6 2018-06-30 2018 Q2
【讨论】: