2013-06-10 16 views
7

Mam wektor znaków, który wyglądaJak sortować wektor znaków według określonej kolejności?

c("white","white","blue","green","red","blue","red") 

i konkretnego zamówienia, która jest jak

c("red","white","blue","green") 

. Chciałbym posortować pierwszy wektor zgodnie z kolejnością drugiego wektora, aby uzyskać następujący wektor: c("red","red","white","white","blue","blue", "green"). Jakie byłoby najlepsze rozwiązanie?

Odpowiedz

14
x <- c("white","white","blue","green","red","blue","red") 
y <- c("red","white","blue","green") 
x[order(match(x, y))] 
# [1] "red" "red" "white" "white" "blue" "blue" "green" 
2

Dodać zmienną w czynnik z poziomami w odpowiedniej kolejności i sort():

x1 <- c("white","white","blue","green","red","blue","red") 
ord <- c("red","white","blue","green") 
f1 <- factor(x1,levels=ord) 
sort(f1) 
## [1] red red white white blue blue green 
## Levels: red white blue green 

Można użyć x2 <- as.character(sort(f1)) jeśli naprawdę chcesz wyniki jako wektor znaków ...

Powiązane problemy