2011-12-12 26 views
0

我有data.frame,看起來像這樣:爲了data.frame

320 Dutch A7  3 

321 Dutch A8  3 

322 Dutch A9  4 

323 Dutch A10  1 

324 Dutch A11  4 

327 Dutch A14  4 

325 Dutch A12  3 

328 Dutch A15 10 

326 Dutch A13  1 

329 Dutch A16  3 

如何訂購它使所有的A1, A2, etc.都是爲了字母和數字,讓我得到:

320 Dutch A7  3 

321 Dutch A8  3 

322 Dutch A9  4 

323 Dutch A10  1 

324 Dutch A11  4 

325 Dutch A12  3 

326 Dutch A13  1 

327 Dutch A14  4 

328 Dutch A15 10 

329 Dutch A16  3 

謝謝!

回答

1

你有點回答你自己的問題。請參閱order函數的幫助。另請參閱this rant

+0

你是對的,可以使用order() - 我只是認爲它只適用於數字。這就是我使用的:Dutch2 < - Dutch [with(Dutch,order(ID)),]假設'Dutch'是data.frame的名稱,並且用於該命令的列被稱爲'ID'。 – Annemarie

1

現在忘記數據框部分。以下是您要訂購

x <- paste(
    rep.int(LETTERS[1:3], 16), 
    rep.int(1:16, 3), 
    sep = "" 
) 
y <- sample(x) 

只是打電話sort(y)不會起作用,因爲數量得到分成lexographical順序,所以你得到的東西像A1,A10,A11,...

相反取樣矢量,請使用substring將列拆分爲字母和數字。

indexer <- data.frame(
    letter = substring(y, 1, 1), 
    number = as.numeric(substring(y, 2)) 
) 

然後,如aL3xa建議,呼叫order訂購所產生的數據幀。

o <- with(indexer, order(letter, number)) 
y[o] 

爲了得到這個與數據幀的工作,只需用your_data$index_column取代y