我在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?
中轻松完成这项工作答案 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"