2015-09-15 100 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确保年内都是为了,即使日期是无序。