Сортировка: поставьте пробел перед дефисом - PullRequest
4 голосов
/ 22 марта 2019

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

Например,

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" 

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

1 Ответ

2 голосов
/ 23 марта 2019

Поскольку сортировка упоминает, что 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()
...