2016-06-30 60 views
0

我認爲這應該很簡單,但我找不到一種方法來做到這一點。基於字符向量重新排序數據幀

我想基於一個因素重新排序數據幀。到目前爲止我能找到的所有答案都提供了邏輯排序,但這是任意的,並且是數字和字母的混合。也許這是一個問題,因爲它是factor而不是vector?但是,載體的答案似乎也沒有效果。

任何建議將非常感激!

實例數據 (注意,這個數據僅僅是這個問題,在我真正的代碼數據幀是其他一些計算的輸出,所以我不能只在開始更改名稱的東西明智右)

DATA<- data.frame(This=c("120", "60", "90", "OG"), That=c(453, 679,12,252)) 

DATA 

    This That 
1 120 453 
2 60 679 
3 90 12 
4 OG 252 

我想它的順序排序,60 - 90 - 120 - OG,即

This That 
1 60 679 
2 90 12 
3 120 453 
4 OG 252 

編輯:這不是一個重複的問題。如上所述,在下面的評論中,排序是任意的。字典排序假定行名是相互關聯的,在這裏不是這種情況。我可以標記該行("unicorn", "18.1", "TREES", "234234235")和順序("234234235", "unicorn", "TREES", "18.1")

+0

是否字符的順序有關係嗎?或者你想按字母順序排序?即如果有'OG'和'AB',你想要'AB,OG'嗎? – Psidom

+0

嗨@ user2100721,謝謝,但其他答案不是我所期待的。排序是任意的,而不是詞典。在這種情況下,它很複雜,因爲我無法更改標籤。 – EcologyTom

回答

0

你可以用factor變量調整的順序如下想讓他們:

DATA$This <- factor(DATA$This, levels=c("60", "90", "120", "OG")) 

請注意,這不會改變標籤值:

DATA 
    This That 
1 120 453 
2 60 679 
3 90 12 
4 OG 252 

但它改變映射到這些標籤的基本整數,這樣就可以對數據進行排序,你想:

DATA[order(DATA$This),] 
    This That 
2 60 679 
3 90 12 
1 120 453 
4 OG 252 
+0

謝謝@lmo,這正是我尋找的東西。我沒有意識到這將是一個兩步驟的過程,在第一階段沒有如我預期的那樣改變它之後,我感到灰心。 – EcologyTom

0

這是一個用於排序混合類型列的選項,我們首先將列轉換爲數字,然後進行排序,確保數值始終位於字符值的前面,並且按照其自然順序排序,然後按字符排序型,這使得確定的字符值是按字母順序排列,假設Thischaracter類已經是:

library(dplyr) 
DATA %>% arrange(as.numeric(This), as.character(This)) 
# This That 
# 1 60 679 
# 2 90 12 
# 3 120 453 
# 4 OG 252 
+0

謝謝@Psidom。目前我對dplyr還是有點不確定,這就是我選擇其他答案的原因。但是我可以看到它在不同的背景下會非常有幫助。 – EcologyTom