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 arrange
in het pakket plyr
maakt het gemakkelijk om op meerdere kolommen te sorteren. Als u bijvoorbeeld DF
eerst wilt sorteren op ID
en vervolgens wilt verminderen met num
, kunt u schrijven
plyr::arrange(DF, ID, desc(num))
Antwoord 4, autoriteit 5%
Gebruik order
functie:
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 orderBy
uit 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 arrange
uit het pakket dplyr
gebruiken 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.