簡體   English   中英

重新排序因子級別,這些級別是R中的日期,但只有月份和年份

[英]Reorder factor levels that are dates but only month and year in R

我正在使用ggvis堆疊條形圖創建一個圖形,其中x軸是日期的時間序列,y軸是頻率。

但是,日期格式為“ Apr 2015”,即月和年。

ggvis ,這意味着我必須在數據框因子中確定日期。

我無法將這些月份日期轉換為按日期排序的因子。 相反,我收到此訂單“ 2015年4月,2015年6月,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)

要按所需順序獲得級別,可以將所需的順序提供給factorlevels參數。 例如:

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可以確保年份是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM