如果您真的只是想在月初将其转换为 "Date" 类,那么 Roland 的解决方案似乎是最直接的,但还有一些其他考虑因素,例如您是否想使用月末或是否真的想首先使用日期来表示年月。
zoo 包有一个"yearmon" 类,它可以直接表示年月而不将它们转换为日期,还有一个as.Date.yearmon 方法,它有一个frac= 参数,可用于指定通过的方式的分数如果您确实想要 "Date" 课程,则要转换到的月份。
首先,确保日期是字符串。问题中的输入显示 1993.10 作为输入之一,因此我们必须确保尾随零。 (如果输入已经是带有尾随零的字符,那么这不是问题。我们在这里假设最坏的情况是假设数字,因此如果需要,我们需要将它们显式转换为带有尾随 0 的字符串。)现在使用 @ 987654326@ 格式为"%Y.%m"。最后使用as.Date.yearmon 转换为"Date" 类。
也许这种方法的最大优点是我们可以将结果留在"yearmon" 类中(即省略"as.Date" 部分,例如as.yearmon(sprintf("%.2f", dates)),或者如果日期已经是字符串,dates.ch,在 "1993.10" 的情况下尾随 0,然后只是 as.yearmon(dates.ch, "%Y.%m"),这确实代表了您拥有的更好的东西,因为这一天并不真正有意义,因为它一开始就不存在。"yearmon" 对象可以被绘制和排序预期的方式。
这是使用"yearmon" 转换为"Date" 类:
library(zoo)
dates <- c(1993.07, 1993.08, 1993.09, 1993.1, 1993.11, 1993.12) # test input
as.Date(as.yearmon(sprintf("%.2f", dates), "%Y.%m")) # 1st of month
## [1] "1993-07-01" "1993-08-01" "1993-09-01" "1993-10-01" "1993-11-01" "1993-12-01"
as.Date(as.yearmon(sprintf("%.2f", dates), "%Y.%m"), frac = 1) # last of month
## [1] "1993-07-31" "1993-08-31" "1993-09-30" "1993-10-31" "1993-11-30" "1993-12-31"
或者如果测试输入看起来像这样:
dates.ch <- c("1993.07", "1993.08", "1993.09", "1993.10", "1993.11", "1993.12") # input
as.Date(as.yearmon(dates.ch, "%Y.%m"))
as.Date(as.yearmon(dates.ch, "%Y.%m"), frac = 1)