我有一个 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)
任何的想法?
这将字符串转换为"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 轴。
如果您坚持使用基本 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 这个问题有点像这个帖子的重复。但在我看来,它的不同足以值得一个新的答案。