2016-11-23 41 views
1

我一直在想如何根據同一個data.frame中的另一列的值來排列因子。我一直用這個問題作爲我努力的基礎:根據另一列的數值設置因子水平

R - Order a factor based on value in one or more other columns

在我的例子,我喜歡的ftororder_ID設置的級別。 order_ID只是訂單的排名。以下是我迄今爲止:

df <- data.frame(order_ID=c(5,3,1,4,2), 
      ftor=LETTERS[1:5]) 


df$ftor <- factor(df$ftor, levels=df[order(df$order_ID),], ordered=TRUE) 

這是我所得到的,當我嘗試上述嘗試後水平:

> levels(df$ftor) 
[1] "c(1, 2, 3, 4, 5)" "c(3, 5, 2, 4, 1)" 

基於對order_ID這裏的價值是什麼,我期待:

> levels(df$ftor) 
[1] "C" "B" "E" "D" "A" 

總之,任何人都可以推薦一種方法,我可以使用一列的水平來設置同一個data.frame中的另一個因子的水平?

+1

它應該是'水平= DF $ ftor [順序(DF $ ORDER_ID)]' –

+0

完美! @RichScriven是你想把這個作爲答案,我會接受這個。我看到了這個問題。謝謝您的幫助。 – boshek

回答

3

這裏的答案,實際上由@RichScriven提供的是我沒有設置我想要的列的順序(df$ftor),而是整個data.frame(df)。另外,索引是不可靠的。所以,最後我更換了這一點:

df$ftor <- factor(df$ftor, levels=df[order(df$order_ID),], ordered=TRUE) 

與此:

df$ftor <- factor(df$ftor, levels=df$ftor[order(df$order_ID)], ordered=TRUE) 
相關問題