将字符字段转换为 R 中的季度日期

and*_*atz 4 r

我有一个 tsv,其中有一个季度格式的日期字段(名为“trim”)

 trim
 1992-4
 1993-1
 ...
Run Code Online (Sandbox Code Playgroud)

当我将文件作为数据框加载时,R 将该字段作为字符导入。

我无法转换它,我只得到 NA,即使我尝试:

 df$trim <- as.Date(df$trim, format="%Y-%q")
Run Code Online (Sandbox Code Playgroud)

或加载动物园包并发送此命令:

as.yearqtr(df$trim, format="%Y-%q")
Run Code Online (Sandbox Code Playgroud)

任何的想法?

G. *_*eck 5

这将字符串转换为"yearqtr"类和"Date"类(第一季度)和"Date"类(最后一个季度):

library(zoo)

as.yearqtr("1992-4")
## [1] "1992 Q4"

as.Date(as.yearqtr("1992-4"))
## [1] "1992-10-01"

as.Date(as.yearqtr("1992-4"), frac = 1)
## [1] "1992-12-31"
Run Code Online (Sandbox Code Playgroud)

请注意,zooscale_x_yearqtr用于定义适合"yearqtr"类的 ggplot2 X 轴。


Tim*_*sen 3

如果您坚持使用基本 Ras.Date()函数,那么您可以考虑的一个选择是将季度映射到月份。在下面的代码中,我将季度映射到该季度发生的第一个月。然后我标记"01"该月的第一天,然后转换为日期。

trim <- c("1992-4", "1993-1")

trim <- gsub("-1", "-01", trim)       # map first quarter to January
trim <- gsub("-2", "-04", trim)       # map second quarter to April
trim <- gsub("-3", "-07", trim)       # map third quarter to July
trim <- gsub("-4", "-10", trim)       # map fourth quarter October

trim <- paste(trim, "-01", sep="")    # add first day of the month

trim <- as.Date(trim, "%Y-%m-%d")     # convert to date

> trim
[1] "1992-10-01" "1993-01-01"
Run Code Online (Sandbox Code Playgroud)

PS 这个问题有点像这个帖子的重复。但在我看来,它的不同足以值得一个新的答案。