2017-06-19 125 views
0

我有一個日期變量,包括月份和年份,其中月份是一個數字(例如,本月/年是'62017',但10月是'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

是如何編碼的單個數字天? 2017年6月1日,是'6117'嗎?或'60117'? – CPak

+0

沒有編碼的日子。完整的值是myyyy,例如6月份爲'62017',11月份爲'112017',1月份爲'12017'。 –

+2

如果'nchar(date.field)== 5'然後將零粘貼到前面,您可以測試字符數而不是子字符串。 –

回答

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")