2017-03-17 44 views
-5

我有一個YYYY/MM,因子類形式的日期列的數據框,我希望將它轉換爲日期類。例如。 2000/01 - > Jan 2000轉換因子YYYY/MM到年份類

我注意到as.Date()無法處理日期格式而沒有day組件。我試過使用zoo軟件包中的as.yearmon()功能。

library('zoo') 
as.yearmon(factor("2000-01")) # It works with YYYY-MM format  
# [1] "Jan 2000"  
as.yearmon(factor("2000/01")) 
# [1] NA 
as.yearmon(factor("2000/01"),"%y/%m") 
# [1] NA 

我正在尋找一個功能,將變爲factor("2000/01") to "Jan 2000"。任何幫助將不勝感激。

+1

請不要加[標籤:R-FAQ]到你自己的問題。 – Frank

+0

也許package'anytime'可能會有所幫助。 – lbusett

+1

'as.yearmon'應該可以在字符上正常工作,所以'as.yearmon(as.character(x))'似乎是一個不錯的選擇。 – Frank

回答

1

如果as.Date有不存在一個月一天一個問題,那麼你的目的,你可以暫時用任何一天餵它:

# Generate 10 "YYYY/MM" 
n <- 10 
our_dates <- paste(sample(1000:2000, n), sample(11:12, n, replace = TRUE), sep = "/") 
our_dates 
[1] "1027/12" "1657/12" "1180/11" "1646/12" "1012/12" "1684/12" "1693/11" "1835/11" 
[9] "1916/11" "1073/12" 

# Dirty fix, add a "day of month" to our dates 
our_dates <- paste0(our_dates, "/01") 
our_dates 
[1] "1027/12/01" "1657/12/01" "1180/11/01" "1646/12/01" "1012/12/01" "1684/12/01" 
[7] "1693/11/01" "1835/11/01" "1916/11/01" "1073/12/01" 

# Format as dates 
x <- as.Date(our_dates,"%Y/%m/%d") 

# Now print out in your fromat: 
format(x, format = "%b %Y") 
[1] "Dec 1027" "Dec 1657" "Nov 1180" "Dec 1646" "Dec 1012" "Dec 1684" "Nov 1693" 
[8] "Nov 1835" "Nov 1916" "Dec 1073" 
+0

謝謝你的幫助! –