2015-05-22 135 views
0

假設我有,其水平的一個因素是重新排序因子水平

"1/1/2013" "1/1/2014" "1/1/2015" "10/1/2012" "10/1/2013" "10/1/2014" "4/1/2013" "4/1/2014" "4/1/2015" "7/1/2012" "7/1/2013" "7/1/2014"

什麼是按日期訴諸最簡單的方法?我知道我可以通過挑選並選擇手動來做到這一點...

謝謝!

+3

我會轉換成'Date'類,然後使用'order'或'sort'。 i..e'sort(as.Date(yourvec,'%d /%m /%Y'))'但是,您的描述不清晰 – akrun

+1

您需要讓類的日期或使用不同的字符格式,如「YYYY -MM-DD」。日期類解決方案雖然更安全。 –

回答

1

這將排序因素的水平,使繪圖將有意義,但普通因素並沒有真正的秩序。因爲在那裏,真正成爲順序,即爲了有一個小於或大於項目之間的關係,你需要定義一個「有序」的因素(見?factor):

> fac <- factor(c("1/1/2013", "1/1/2014", "1/1/2015", "10/1/2012", "10/1/2013" ,"10/1/2014", "4/1/2013", "4/1/2014" , "4/1/2015" , "7/1/2012", "7/1/2013", "7/1/2014")) 
> levels(fac) <- levels(fac)[ order(as.Date(levels(fac), format="%m/%d/%Y"))] 
> fac 
[1] 7/1/2012 10/1/2012 1/1/2013 4/1/2013 7/1/2013 10/1/2013 
[7] 1/1/2014 4/1/2014 7/1/2014 10/1/2014 1/1/2015 4/1/2015 
12 Levels: 7/1/2012 10/1/2012 1/1/2013 4/1/2013 ... 4/1/2015 

現在的水平會在訂單展示你期望:

> levels(fac) 
[1] "7/1/2012" "10/1/2012" "1/1/2013" "4/1/2013" "7/1/2013" 
[6] "10/1/2013" "1/1/2014" "4/1/2014" "7/1/2014" "10/1/2014" 
[11] "1/1/2015" "4/1/2015" 

但是,如果有重複的元素,那麼水平會比因素載體本身更短,他們仍然不是「爲了」在載體本身,因爲......這不是一個有序的因素。將該矢量轉換爲Date-類別會更有意義。

或者你可以忽略我的建議,只會做你要求做:

> fac[ order(as.Date(fac, format="%m/%d/%Y"))] 
[1] 7/1/2012 10/1/2012 1/1/2013 4/1/2013 7/1/2013 10/1/2013 
[7] 1/1/2014 4/1/2014 7/1/2014 10/1/2014 1/1/2015 4/1/2015 
12 Levels: 1/1/2013 1/1/2014 1/1/2015 10/1/2012 ... 7/1/2014