Я хотел бы отсортировать вектор символов, но пробелы должны быть перед дефисами в сортировке.
Например
c("Want-#3","Want #2","I want to be first") %>% sort()
[1] "I want to be first" "Want-#3" "Want #2"
Я бы хотел, чтобы он вернулся
[1] "I want to be first" "Want #2" "Want-#3"
Очевидно, я мог бы использовать параметр «по убыванию» в сортировке, но это не будет работать, если мой список будет включать другие нетривиальные вещи, если я хочу, чтобы он был отсортирован по возрастанию.





Как упоминает divibisan, сортировка зависит от locale, вы можете проверить свой язык, запустив Sys.getlocale()
Выполнение приведенного ниже кода отключит сортировку по локали и даст желаемый результат. Я не совсем уверен в других процессах R, на которые это может повлиять, поэтому я буду осторожен с его использованием.
string1<-c("Want-#3","Want #2","I want to be first")
string1 %>% sort()
old <- Sys.getlocale("LC_COLLATE") #Saving my original locale to an object named "old"
Sys.setlocale("LC_COLLATE", "C") # Turns off locale specific sorting
string1 %>% sort() # Sorting should now produce desired results
Затем, чтобы вернуть R в исходную локаль, просто запустите
Sys.setlocale("LC_COLLATE", old)
string1 %>% sort()
Я сделал это, и это ДЕЙСТВИТЕЛЬНО работало. Однако я нашел это как часть tidyverse stringr.tidyverse.org/reference/str_order.html. Это также работает БЕЗ необходимости устанавливать локаль. Отличается ли базовая базовая локаль R от используемой здесь?
Он думает, что это зависит от ОС, но если string1 %>% sort() дает разные результаты, значит str_sort(string1) он должен использовать другую локаль. Немного странно, поскольку str_sort() по умолчанию имеет значение locale= "en", а моя локаль по умолчанию, возвращаемая Sys.getlocale, — «English_United States.1252». Но я думаю, что это не эквивалентно.
Это странно. Он сортирует так, как вы хотите, на моей машине. Сортировка зависит от
locale: можешь запуститьsessionInfo()и показать результаты? Если вы используете UTF8, то пробел должен стоять перед-