簡體   English   中英

通過R中的數據對因子水平進行重新排序

[英]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.

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