Как сортировать буквы в строке?

Скажем, у меня есть строка s = "bcabca" .

Каков самый простой способ получить "aabbcc" из него, т. "aabbcc" буквы в s ?

Возможно, это не самый простой ответ, но это будет работать:

 paste(sort(unlist(strsplit(s, ""))), collapse = "") 

Или измените функцию strReverse , определенную на странице справки, для ?strsplit в соответствии с нашими потребностями. Назовем его strSort:

 strSort <- function(x) sapply(lapply(strsplit(x, NULL), sort), paste, collapse="") 

Вот вариант решения Chase, который обрабатывает вектор строк и сохраняет исходные строки как имена. … и я получаю шанс продвигать использование vapply над sapply 🙂

 > x=c('hello', 'world', NA, 'a whole sentence') > vapply(x, function(xi) paste(sort(strsplit(xi, NULL)[[1]]), collapse=''), '') hello world  a whole sentence "ehllo" "dlorw" "" " aceeeehlnnostw" 

Возможно, было бы неплохо упомянуть пакет stringi для этой проблемы. Это функции stri_order и stri_sort которые очень эффективны, проверяя в половине времени упомянутого выше базового метода R.

 library(stringi) ## generate 10k random strings of 100 characters each str <- stri_rand_strings(1e4, 100) ## helper function for vapply() striHelper <- function(x) stri_c(x[stri_order(x)], collapse = "") ## timings system.time({ v1 <- vapply(stri_split_boundaries(str, type = "character"), striHelper, "") }) # user system elapsed # 0.747 0.000 0.743 system.time({ v2 <- sapply(lapply(strsplit(str, NULL), sort), paste, collapse="") }) # user system elapsed # 2.077 0.000 2.068 identical(v1, v2) # [1] TRUE 

Повторяя это, мой старый ответ был не так хорош. Вот лучшая версия с base функциями:

 vapply(strsplit(x, NULL), function(x) paste(sort(x), collapse = ''), '') 

Исходя из этого тестового вектора:

 NN = 1000000L starts = seq(1L, NN, by = 100L) name = substring(paste(sample(letters, size = NN, replace = TRUE), collapse = ""), starts, starts + 99L) 
  • В R, как получить имя объекта после его отправки в функцию?
  • как вы отправляете письмо от R
  • backtransform `scale ()` для построения графика
  • data.frame без разрушения имен столбцов
  • Есть ли способ сделать R звуковой сигнал / воспроизвести звук в конце скрипта?
  • Найдите, сколько раз повторяющиеся строки повторяются в кадре данных R
  • Почему используется `<< -` нахмурился и как я могу его избежать?
  • R усиливает местный охват
  • Создание вектора, разделенного запятыми
  • Манекены переменных из строковой переменной
  • Как вы кодируете функцию R так, чтобы она «знала», чтобы искать «данные» для переменных в других аргументах?
  • Давайте будем гением компьютера.