首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:将某个字符后面的所有内容大写

R:将某个字符后面的所有内容大写
EN

Stack Overflow用户
提问于 2012-05-29 16:09:14
回答 3查看 3.7K关注 0票数 16

我想要将第一个_之后的字符向量中的所有内容大写。例如,以下向量:

代码语言:javascript
复制
x <- c("NYC_23df", "BOS_3_rb", "mgh_3_3_f") 

应该是这样的:

代码语言:javascript
复制
"NYC_23DF" "BOS_3_RB" "mgh_3_3_F"

我一直在尝试玩regular expressions,但是我不能这样做。如有任何建议,我们将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-29 16:58:24

你们很接近了:

代码语言:javascript
复制
gsub("(_.*)","\\U\\1",x,perl=TRUE)

看起来很管用。您只需要使用_.* (下划线后跟零个或多个其他字符)而不是_* (零个或多个下划线) ...

为了更深入地了解这一点:

  • _.*提供了一个正则表达式模式,该模式匹配一个下划线_,后跟任意数量(包括0)的附加字符;element"
  • surrounding表示“任何字符”,*表示“前一个模式的零个或多个重复”这个带括号的正则表达式()表示它是我们想要插入的模式,在替换字符串中插入“插入第一个匹配模式的内容”,即任何与perl=TRUE相匹配的element“
  • surrounding,都会表示”将后面的内容放在大写字母中“(大写_没有任何效果;如果我们想要大写(例如)小写的g之后的所有内容,我们需要从存储的模式中排除g,并将其包含在替换模式中:gsub("g(.*)","g\\U\\1",x,perl=TRUE))

有关详细信息,请在?gsub中搜索“替换”和“大写”(有关正则表达式的一般信息,请在?regexp中搜索)。

票数 24
EN

Stack Overflow用户

发布于 2012-05-29 17:18:10

gsubfn package中的gsubfn类似于gsub,只是替换字符串可以是一个函数。在这里,我们匹配_以及之后通过toupper提供的所有内容:

代码语言:javascript
复制
> library(gsubfn)
>
> gsubfn("_.*", toupper, x)
[1] "NYC_23DF"  "BOS_3_RB"  "mgh_3_3_F"

请注意,此方法涉及一个特别简单的正则表达式。

票数 12
EN

Stack Overflow用户

发布于 2012-05-29 16:33:32

使用base::strsplit的简单示例

代码语言:javascript
复制
x <- c("NYC_23df", "BOS_3_rb", "mgh_3_3_f", "a") 

myCap <- function(x) {
    out <- sapply(x, function(y) {
        temp <- unlist(strsplit(y, "_"))
        out <- temp[1]
        if (length(temp[-1])) {
            out <- paste(temp[1], paste(toupper(temp[-1]), 
                collapse="_"), sep="_") 
        }
        return(out)
    })
    out
}

> myCap(x)
   NYC_23df    BOS_3_rb   mgh_3_3_f           a 
 "NYC_23DF"  "BOS_3_RB" "mgh_3_3_F"         "a" 

使用stringr包的示例

代码语言:javascript
复制
pkg <- "stringr"
if (!require(pkg, character.only=TRUE)) {
    install.packages(pkg)
    require(pkg, character.only=TRUE)   
}

myCap.2 <- function(x) {
    out <- sapply(x, function(y) {
        idx <- str_locate(y, "_")
        if (!all(is.na(idx[1,]))) {
            str_sub(y, idx[,1], nchar(y)) <- toupper(str_sub(y, idx[,1], nchar(y))) 
        }
        return(y)
    })
    out
}

> myCap.2(x)
   NYC_23df    BOS_3_rb   mgh_3_3_f           a 
 "NYC_23DF"  "BOS_3_RB" "mgh_3_3_F"         "a" 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10795334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档