如何将除R中的一些字母之外的所有字母大写

时间:2016-05-04 20:18:41

标签: r replace uppercase lowercase capitalization

我在R中有一个带有一列字符串的数据框,例如v1 <- c('JaStADmmnIsynDK', 'laUksnDTusainS')

我的目标是将每个字母中的所有字母大写,除了&#39; s,&#39; t&#39;和&#39;。

结果应该最终成为:&#39; JAStADMMNIsyNDK&#39;和&#39; LAUKsNDTUsAINS&#39;。

因此不改变任何上述字母:&#39; s&#39;&#39; t&#39;并且&#39; y&#39;。

截至目前,我只需要25倍

即可
levels(df$strings) <- sub('n', 'N', levels(df$strings))

但这似乎有点矫枉过正!我怎样才能在R?

中轻松完成这项工作

3 个答案:

答案 0 :(得分:6)

尝试

v2 <- gsub("[sty]", "", paste(letters, collapse="")) 
chartr(v2, toupper(v2), v1)
#[1] "JAStADMMNIsyNDK" "LAUKsNDTUsAINS" 

数据

v1 <- c("JaStADmmnIsynDK", "laUksnDTusainS")

答案 1 :(得分:1)

@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"

答案 2 :(得分:1)

我们可以使用'\ 1'捕获组上的perl'\ U'运算符直接gsub()对每个适用的小写字母进行大写替换(@Akrun提醒):

v1 <- c("JaStADmmnIsynDK", "laUksnDTusainS")
gsub('([a-ru-xz])', '\\U\\1'), v1, perl = TRUE)
"JAStADMMNIsyNDK" "LAUKsNDTUsAINS"