Hoe sorteer ik een dataframe op alfabetische volgorde van een tekenvariabele in R?

Ik wil een dataframe sorteren op alfabetische volgorde van een tekenvariabele in R. Ik heb geprobeerd dit te doen met de functie order() maar het transformeert mijn dataframe in een lijst. Heeft iemand een idee?


Antwoord 1, autoriteit 100%

Nou, ik heb hier geen probleem :

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

Antwoord 2, autoriteit 23%

#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) , ])

Antwoord 3, autoriteit 14%

De functie arrangein het pakket plyrmaakt het gemakkelijk om op meerdere kolommen te sorteren. Als u bijvoorbeeld DFeerst wilt sorteren op IDen vervolgens wilt verminderen met num, kunt u schrijven

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

Antwoord 4, autoriteit 5%

Gebruik orderfunctie:

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

Een andere oplossing is het gebruik van de functie orderByuit het doBy-pakket:

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

Antwoord 5, autoriteit 4%

Dit hoort echt bij het antwoord van @Ramnath, maar ik kan geen commentaar geven omdat ik nog niet genoeg reputatie heb. U kunt ook de functie arrangeuit het pakket dplyrgebruiken op dezelfde manier als het pakket plyr.

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

Antwoord 6

De functie order() mislukt wanneer de kolom niveaus of factor heeft. Het werkt correct wanneer stringsAsFactors=FALSE wordt gebruikt bij het maken van data.frame.

Other episodes