2015-09-15 71 views
1

我使用ggvis堆疊的條形圖創建一個圖表,其中x軸是時間序列的日期,y軸是頻率。重新排序因子水平即日期,但只有月份和年份R

但是日期格式爲「2015年4月」,即月份和年份。

ggvis,這意味着我必須在我的數據幀因素中作出日期。

我無法將這些月份日期轉換爲按日期排序的因素。相反,我得到這個順序 「2015年4月,君2015年,2015年5月」

這是我的代碼:

selecteddates <- with(dailyIndMelt, dailyIndMelt[date >= as.Date(input$monthlydateInd[1]) & date <= as.Date(input$monthlydateInd[2]),]) 
selecteddates <- aggregate(selecteddates[,3],by=list(selecteddates$variable,substr(selecteddates$date,1,7)),sum) 
colnames(selecteddates) <- c("industry", "date", "vacancyno") 
selecteddates$date <- as.Date(paste(selecteddates$date,"-28",sep="")) 
selecteddates <- selecteddates[order(as.Date(selecteddates$date)),] 
selecteddates$date <- format(selecteddates$date, "%m %Y") 
selecteddates$date <- factor(selecteddates$date) 
levels(selecteddates$date) <- levels(selecteddates$date)[order(as.Date(levels(selecteddates$date), format="%m %Y"))] 
levels(selecteddates) 

回答

1

爲了得到你想要的訂單水平,可以喂所需的順序參數factor。例如:

selecteddates$date <- factor(selecteddates$date, 
          levels=paste(month.abb, rep(2014:2015, each=12))) 

month.abb是一個內置的月份縮寫向量。 paste函數將月份縮寫和年份值粘貼在一起,以便您獲得正確的排序。我用2014年和2015年作插圖。只需將其更改爲數據中出現的任何年份即可。

這裏有它自己的paste語句說明:

paste(month.abb, rep(2014:2015, each=12)) 

[1] "Jan 2014" "Feb 2014" "Mar 2014" "Apr 2014" "May 2014" "Jun 2014" "Jul 2014" "Aug 2014" 
[9] "Sep 2014" "Oct 2014" "Nov 2014" "Dec 2014" "Jan 2015" "Feb 2015" "Mar 2015" "Apr 2015" 
[17] "May 2015" "Jun 2015" "Jul 2015" "Aug 2015" "Sep 2015" "Oct 2015" "Nov 2015" "Dec 2015" 

理想情況下,你可以從你的數據獲得所需的編程多年,直接。如果您的日期日期格式開始時,你可以做一些類似於此:

library(lubridate) # For year function 

# Fake date data 
dates = seq(as.Date("2010-01-15"), as.Date("2015-01-15"), by="1 day") 

# Extract the years from the dates and use them to create the month-year levels 
levels = paste(month.abb, rep(sort(unique(year(dates))), each=12)) 

在上面的代碼中,sort確保年內都是爲了,即使日期是無序。