如何将YYYYMX(tm)格式字符转换为没有字符串操作的日期?

时间:2016-01-09 08:50:59

标签: r date

我有一个月度数据文件,其中日期以%tm格式存储为Stata,如2000m1。我如何将其转换为日期?

我可以做一些事情,比如将字符串操纵到2000-01-01,但我想尽可能避免这种情况。

as.Date('2000m1')(不出所料)返回NA

2 个答案:

答案 0 :(得分:2)

这可以通过令人惊叹的lubridate包非常轻松地完成:

data <- c("2001m1","2010m3","2015m12","2009m8")

library(lubridate)
parse_date_time(data,orders="%Y%m"):

[1] "2001-01-01 UTC" "2010-03-01 UTC" "2015-12-01 UTC" "2009-08-01 UTC"

答案 1 :(得分:2)

1)yearmon 使用zoo包,这将它转换为"yearmon"类对象,这可能比将它转换为"Date"更有意义,因为你没有这个月的某一天。这些对象在内部表示为年份+ 0表示1月,年份+ 1月12日表示等等,因此它们排序正确。

library(zoo)

as.yearmon('2000m1', '%Ym%m')
## [1] "Jan 2000"

如果您真的想要"Date"课程,那么以下分别给出月份的开始和结束:

as.Date(as.yearmon('2000m1', '%Ym%m'))
## [1] "2000-01-01"

as.Date(as.yearmon('2000m1', '%Ym%m'), frac = 1)
[1] "2000-01-31"

2)粘贴这不使用任何软件包,虽然它确实使用paste,但字符串操作的使用相当少:

as.Date(paste("2000m1", 1), "%Ym%m %d")
## [1] "2000-01-01"

注意:请确保不要使用任何返回POSIXct对象而不是"yearmon""Date"对象的解决方案,因为那时您已经介绍了未来潜在错误的可能性基于代码的时区,可以通过使用适当的类完全避免。请参阅R News 4/1中的R帮助台文章。