如何将R中除某些字母外的所有字母大写
How to capitalize all but some letters in R
我在 R 中有一个带有一列字符串的数据框,例如v1 <- c('JaStADmmnIsynDK', 'laUksnDTusainS')
我的目标是将每个字符串中除 's'、't' 和 'y' 之外的所有字母都大写。
所以结果应该是:'JAStADMMNIsyNDK' 和 'LAUKsNDTUsAINS'。
因此不更改任何上述字母:'s'、't' 和 'y'。
截至目前,我只需拥有 25x
levels(df$strings) <- sub('n', 'N', levels(df$strings))
但这似乎有点过分了!我怎样才能在 R 中轻松做到这一点?
尝试
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()
在每个适用的小写字母上使用大写替换,在 '\1' 捕获组上使用 perl '\U' 运算符(@Akrun 提醒):
v1 <- c("JaStADmmnIsynDK", "laUksnDTusainS")
gsub('([a-ru-xz])', '\U\1'), v1, perl = TRUE)
"JAStADMMNIsyNDK" "LAUKsNDTUsAINS"
我在 R 中有一个带有一列字符串的数据框,例如v1 <- c('JaStADmmnIsynDK', 'laUksnDTusainS')
我的目标是将每个字符串中除 's'、't' 和 'y' 之外的所有字母都大写。
所以结果应该是:'JAStADMMNIsyNDK' 和 'LAUKsNDTUsAINS'。
因此不更改任何上述字母:'s'、't' 和 'y'。
截至目前,我只需拥有 25x
levels(df$strings) <- sub('n', 'N', levels(df$strings))
但这似乎有点过分了!我怎样才能在 R 中轻松做到这一点?
尝试
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()
在每个适用的小写字母上使用大写替换,在 '\1' 捕获组上使用 perl '\U' 运算符(@Akrun 提醒):
v1 <- c("JaStADmmnIsynDK", "laUksnDTusainS")
gsub('([a-ru-xz])', '\U\1'), v1, perl = TRUE)
"JAStADMMNIsyNDK" "LAUKsNDTUsAINS"