我有一个日期变量,其中包括月份和月份,其中月份是一位数(例如,这个月/年是'62017',但十月是'102017')。我需要最终格式为'6/1/2017'。我已经尝试使用as.Date进行转换,但它不起作用,因为%m需要两位数。
我的解决方法是在没有以'102'(十月),'112'(十一月)或'122'(十二月)开头的日期添加前导零。我也有一些我不得不忽略的NA。代码:
index <- substr(ll$Maturity.Date,1,3) != 102 & substr(ll$Maturity.Date,1,3) != 112 & substr(ll$Maturity.Date,1,3) != 122 & !is.na(ll$Maturity.Date)
ll$Maturity.Date[index] <- paste0(0,ll$Maturity.Date[index])
从这里,我可以根据需要转换为其他格式。但是,我想知道除了硬编码之外是否还有更好的方法可以做到这一点,因为这个代码在使用90年代的历史数据或下个世纪的数据时会破裂,这两种情况都是未来的可能性。
答案 0 :(得分:2)
使用sprintf
来填充0可能最容易。这是一个解决方案:
sprintf("%06.0f", as.numeric(temp))
[1] "062017" "102017"
然后将其与paste0
结合使用以添加日期(1)和as.Date
以获取
as.Date(paste0(sprintf("%06.0f", as.numeric(temp)),"-1"), "%m%Y-%d")
[1] "2017-06-01" "2017-10-01"
数据强>
temp <- c("62017", "102017")