[英]reorder factor levels by data in R
假設我有一個因素,其水平是
"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"
按日期提出此要求的最簡單方法是什么? 我知道我可以通過選擇並手動執行此操作...
謝謝!
這將對因子的水平進行排序,以便可以進行繪制,但是普通因子實際上沒有順序。 為了使訂單真正存在,即項目之間存在小於或大於的關系,您需要定義一個“有序”因子(請參閱?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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.