我有一个月度数据文件,其中日期以%tm
格式存储为Stata,如2000m1
。我如何将其转换为日期?
我可以做一些事情,比如将字符串操纵到2000-01-01
,但我想尽可能避免这种情况。
as.Date('2000m1')
(不出所料)返回NA
。
答案 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帮助台文章。