2012-05-18 88 views
1

我原始Excel文件中的日期代表格式爲「Jan-01」的月度數據。當然,我可以手動將它們轉換爲Excel中更有用的東西,然後將其輸入到R.將mm-yy字符串「Jan-01」轉換爲日期格式R

如何將這樣的adate轉換爲R中的Date類?

+0

正如標題中提到的那樣,它是月份和年份,而不是月份和日期。 strptime(「Jan-01」,「%b-%d」)[1]「2012-01-01」> strptime(「Jan-01」,「%b-%y」)[1] NA – Fred

+1

添加1代表月份的第一天:'datevar < - 「Jan-01」; as.Date(paste(「01」,datevar,sep =「 - 」),「%d-%b-%y」);' – thelatemail

回答

0

編輯:

最簡單的方法是使用yearmon類動物園:

require(zoo) 
as.yearmon(x, "%b-%y") 
#[1] "Jan 2001" 

稍長方法:

x="Jan-01" 
xs<-strsplit(x, "-") 
xd <- as.Date(xs[[1]][2], paste(xs[[1]][1], "01", sep="-"), format="%y-%b-%d") 
xd 
#[1] "2001-01-01" 

如果你想處理日期的字符串,那麼你可能需要使用sapply,如果選擇第二種方法來製作一個年的矢量和一個月的矢量

+0

請參閱標題,它是月份和年份,不是月份和日期。 > xd < - as.Date(paste(xs [[1]] [1],xs [[1]] [2],sep =「 - 」),format =「%b-%y」)012d> xd (paste(xs [[1]] [1],xs [[1]] [2],sep =「 - 」),format =「%b-% Y「) > xd [1] NA > xd < - as.Date(paste(xs [[1]] [1],xs [[1]] [2],sep =」 - 「) =「d% - %b-%Y」) > xd [1]不適用 – Fred

+0

好的,很容易修復。兩位數年份的格式規範是%y而不是%Y –

0

如果強行指定月份的第一天,你可以將日期轉換爲這樣:

datevar <- c("Jan-01","Feb-01","Mar-12") 
as.Date(paste("01",datevar,sep="-"),"%d-%b-%y") 

應當指出的是,這在本質上是相同的答案迪文有如下,只是手動指定日,而不是那一年。

4

如果你想有一個date類,使用as.Date:

x <- "Jan-01" 
as.Date(paste("01-", x, sep = ""), format = "%d-%b-%y") 

如果你想有一個POSIXct類,可以考慮使用lubridate

library(lubridate) 
x <- "Jan-01" 
dmy(paste("01-", x , sep ="")) 

如果你想僅僅依靠base

x <- "Jan-01" 
as.POSIXct(paste("01-", x, sep = ""), format = "%d-%b-%y") 
+0

正如OP所述,您的第一個'as.Date'會給出一個「NA」結果,因爲R無法猜測整個日期。 – thelatemail

+0

oops blooper。粘貼錯誤的代碼。編輯。 – JackeJR

相關問題