Сортировка: поставить пробел перед дефисом

Я хотел бы отсортировать вектор символов, но пробелы должны быть перед дефисами в сортировке.

Например

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" 

Очевидно, я мог бы использовать параметр «по убыванию» в сортировке, но это не будет работать, если мой список будет включать другие нетривиальные вещи, если я хочу, чтобы он был отсортирован по возрастанию.

Это странно. Он сортирует так, как вы хотите, на моей машине. Сортировка зависит от locale: можешь запустить sessionInfo() и показать результаты? Если вы используете UTF8, то пробел должен стоять перед -

divibisan 22.03.2019 21:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
154
1

Ответы 1

Как упоминает 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 от используемой здесь?

RayVelcoro 22.03.2019 22:37

Он думает, что это зависит от ОС, но если string1 %>% sort() дает разные результаты, значит str_sort(string1) он должен использовать другую локаль. Немного странно, поскольку str_sort() по умолчанию имеет значение locale= "en", а моя локаль по умолчанию, возвращаемая Sys.getlocale, — «English_United States.1252». Но я думаю, что это не эквивалентно.

M.Bergen 23.03.2019 00:19

Другие вопросы по теме