2017-02-25 54 views
1

我想根據觀察的總和來排列因子。如何按R條件排列因子?

df <- mtcars[,c('cyl', 'gear')] 
df$cyl <- factor(df$cyl) 

str(df) 
'data.frame': 32 obs. of 2 variables: 
$ cyl : Factor w/ 3 levels "4","6","8": 2 2 1 2 3 2 3 1 1 2 ... 
$ gear: num 4 4 4 3 3 3 3 4 4 4 ... 

請在行中查看總和cyl

addmargins(table(df)) 
    gear 
cyl 3 4 5 Sum 
    4 1 8 2 11 
    6 2 4 1 7 
    8 12 0 2 14 
    Sum 15 12 5 32 

升序的cyl順序應該是648。我的意思是

$ cyl : Factor w/ 3 levels "6","4","8" 

我怎麼能意識到這一點?

問題的背景是: Order groups in a stacked stripchart by sum in R

回答

1

您可以將期望的順序送入factor的levels參數。在這種情況下,這樣做對飛,更換你的第二個符合:

df$cyl <- factor(df$cyl, levels=names(sort(table(df$cyl)))) 

然後你得到

str(df) 
'data.frame': 32 obs. of 2 variables: 
$ cyl : Factor w/ 3 levels "6","4","8": 1 1 2 1 3 1 3 2 2 1 ... 
$ gear: num 4 4 4 3 3 3 3 4 4 4 ... 

在這裏,頻率值使用table計算,然後用按升序排序sort。結果被饋送到levels參數,該參數確定factor中的級別排序。

注:我原本用names包裹在as.numeric,但後來發現這是沒有必要的。 factor功能執行必要的轉換。