Jak wykonać sortowanie naturalne (leksykograficzne) w R? [duplikat]
to pytanie ma już odpowiedzi tutaj :
jak sortować wektor znaków, w którym elementy zawierają litery i cyfry w R?
(6 odpowiedzi)
Zamknięte 2 miesiące temu .
Czy istnieje rodzaj naturalny dla R?
Powiedzmy, że miałem taki wektor znaków:
seq.names <- c('abc21', 'abc2', 'abc1', 'abc01', 'abc4', 'abc201', '1b', '1a')
Chciałbym to uporządkować afanumerycznie, więc odzyskam to:
c('1a', '1b', 'abc1', 'abc01', 'abc2', 'abc4', 'abc21', 'abc201')
Czy to gdzieś istnieje, czy powinienem zacząć kodować?
25
Author: Gregor Thomas, 2010-05-06
2 answers
Nie sądzę, że "sortowanie alfanumeryczne" oznacza to, co myślisz, że to znaczy.
W każdym razie, wygląda na to, że chcesz mixedsort, część gtools .
> install.packages('gtools')
[...]
> require('gtools')
Loading required package: gtools
> n
[1] "abc21" "abc2" "abc1" "abc01" "abc4" "abc201" "1b" "1a"
> mixedsort(n)
[1] "1a" "1b" "abc1" "abc01" "abc2" "abc4" "abc21" "abc201"
42
Author: Nicholas Riley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-13 16:34:09
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-13 16:34:09
Sortowanie naturalne jest dostępne w stringr
/stringi
pakiety z funkcjami str_sort()
/stri_sort()
. Przełączanie pomiędzy sortowaniem alfanumerycznym i naturalnym jest kontrolowane przez argument 'numeryczny'.
library(stringr)
# library(stringi)
str_sort(seq.names, numeric = TRUE)
# stri_sort(seq.names, numeric = TRUE)
[1] "1a" "1b" "abc1" "abc01" "abc2" "abc4" "abc21" "abc201"
Funkcja towarzysząca str_order()
/ stri_order()
zwraca indeksy do uporządkowania wektora w (domyślnie) porządku rosnącego:
str_order(seq.names, numeric = TRUE)
# stri_order(seq.names, numeric = TRUE)
[1] 8 7 3 4 2 5 1 6
seq.names[str_order(seq.names, numeric = TRUE)]
[1] "1a" "1b" "abc1" "abc01" "abc2" "abc4" "abc21" "abc201"
9
Author: 27 ϕ 9,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-16 22:28:43
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-16 22:28:43