2016-06-15 51 views
-1
data = data.frame(v1 = c(2,"10+",3,4,5,6,7,8,9), v2 = c(15,30,12,59,44,24,67,19,35)) 

    data$v1 

    [1] 2 10+ 3 4 5 6 7 8 9 
    Levels: 10+ 2 3 4 5 6 7 8 9 

    mixedorder(data$v1) 

    [1] 2 1 3 4 5 6 7 8 9 

注意「10+」變成「1」。那是怎麼回事?gtools :: mixedorder改變我的數據幀

+0

你混淆了'和'mixedsort' mixedorder'。 – Roland

+0

根據另一個SO問題,當你想對整個數據幀進行排序時,將使用'mixedsort',而不是僅對列中的值進行重新排序。這不正確嗎?我也嘗試過'mixedsort',但我的另一列(v2)保持相同的順序。 – rnewbie

+0

您應該先嚐試瞭解基本函數'order'。顯然你想'數據[mixedorder(data $ v1),]'。 – Roland

回答

1

使用正則表達式這樣,除去所有非數字字符:

data[order(as.numeric(gsub("[^[:digit:]]+", "", data$v1))),] 
# v1 v2 
#1 2 15 
#3 3 12 
#4 4 59 
#5 5 44 
#6 6 24 
#7 7 67 
#8 8 19 
#9 9 35 
#2 10+ 30