У меня есть фрейм данных в R со столбцом строк, например. v1 <- c('JaStADmmnIsynDK', 'laUksnDTusainS')
Моя цель - сделать все буквы в каждой строке заглавными, кроме «s», «t» и «y».
В результате должен получиться следующий результат: «JAStADMMNIsyNDK» и «LAUKsNDTUsAINS».
Таким образом, не меняя ни одной из указанных букв: 's', 't' и 'y'.
На данный момент я делаю это, просто имея 25x
levels(df$strings) <- sub('n', 'N', levels(df$strings))
Но это кажется излишним! Как я могу легко это сделать в R?
3 ответа
Пытаться
v2 <- gsub("[sty]", "", paste(letters, collapse=""))
chartr(v2, toupper(v2), v1)
#[1] "JAStADMMNIsyNDK" "LAUKsNDTUsAINS"
Данные
v1 <- c("JaStADmmnIsynDK", "laUksnDTusainS")
Ответ, опубликованный @akrun, действительно великолепен. Но вот мой более прямой подход грубой силы, который я закончил слишком поздно.
s <- "JaStADmmnIsynDK"
customUpperCase <- function(s,ignore = c("s","t","y")) {
u <- sapply(unlist(strsplit(s,split = "")),
function(x) if(!(x %in% ignore)) toupper(x) else x )
paste(u,collapse = "")
}
customUpperCase(s)
#[1] "JAStADMMNIsyNDK"
Мы можем напрямую gsub()
заменить прописные буквы на каждую применимую строчную букву, используя оператор perl '\ U' в группе захвата '\ 1' (о чем напомнил @Akrun):
v1 <- c("JaStADmmnIsynDK", "laUksnDTusainS")
gsub('([a-ru-xz])', '\\U\\1'), v1, perl = TRUE)
"JAStADMMNIsyNDK" "LAUKsNDTUsAINS"
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.