2013-02-11 14 views

risposta

32

Beh, non ho nessun problema qui:

df <- data.frame(v=1:5, x=sample(LETTERS[1:5],5)) 
df 

# v x 
# 1 1 D 
# 2 2 A 
# 3 3 B 
# 4 4 C 
# 5 5 E 

df <- df[order(df$x),] 
df 

# v x 
# 2 2 A 
# 3 3 B 
# 4 4 C 
# 1 1 D 
# 5 5 E 
6
#sort dataframe by col 
sort.df <- with(df, df[order(sortbythiscolumn) , ]) 

#can also sort by more than one variable: sort by col1 and then by col2 
sort2.df <- with(df, df[order(col1, col2) , ]) 

#sort in reverse order 
sort2.df <- with(df, df[order(col1, -col2) , ]) 
+0

Non penso che questo sia ancora abbastanza chiaro, che 'col1' dovrebbe essere' df $ col1' qui. Sarei felice di votare se potessi modificare questa parte. E probabilmente potresti aggiungere anche il buon uso di 'with' qui! – Arun

+3

(+1) Preferisco usare 'df [con (df, order (col1, col2)),]', ma entrambi sembrano essere gli stessi sotto. – Arun

3

Uso order funzione:

set.seed(1) 
DF <- data.frame(ID= sample(letters[1:26], 15, TRUE), 
       num = sample(1:100, 15, TRUE), 
       random = rnorm(15), 
       stringsAsFactors=FALSE) 
DF[order(DF[,'ID']), ] 
    ID num  random 
10 b 27 0.61982575 
12 e 2 -0.15579551 
5 f 78 0.59390132 
11 f 39 -0.05612874 
1 g 50 -0.04493361 
2 j 72 -0.01619026 
14 j 87 -0.47815006 
3 o 100 0.94383621 
9 q 13 -1.98935170 
8 r 66 0.07456498 
13 r 39 -1.47075238 
15 u 35 0.41794156 
4 x 39 0.82122120 
6 x 94 0.91897737 
7 y 22 0.78213630 

Un'altra soluzione sarebbe utilizzando orderBy funzione dal pacchetto DOBY:

> library(doBy) 
> orderBy(~ID, DF) 
5

La funzione arrange nel pacchetto plyr facilita l'ordinamento di più colonne. Ad esempio, per ordinare DF da ID prima e poi in diminuzione del num, è possibile scrivere

plyr::arrange(DF, ID, desc(num)) 
0

Questo appartiene veramente con @ risposta di Ramnath ma non posso commentare come io non ho abbastanza reputazione ancora. È inoltre possibile utilizzare la funzione dal pacchetto dplyr allo stesso modo del pacchetto plyr.

library(dplyr) 
arrange(DF, ID, desc(num)) 
0

La funzione order() ha esito negativo quando la colonna ha livelli o fattori. Funziona correttamente quando stringsAsFactors = FALSE viene utilizzato nella creazione di data.frame.

Problemi correlati