【问题标题】:how to replace nth character of a string in a column in r如何替换r中列中字符串的第n个字符
【发布时间】:2015-10-24 01:05:06
【问题描述】:

我的意见是

a<-c("aa_bbb_cc_ddd","ee_fff_gg_hhh")
b<-c("a","b")
df<-data.frame(cbind(a,b))

我希望我的输出是

a<-c("aa_bbb-cc_ddd","ee_fff-gg_hhh")
b<-c("a","b")
df<-data.frame(cbind(a,b))

请帮忙

【问题讨论】:

    标签: regex r string dataframe gsub


    【解决方案1】:

    如果事情与您显示的一样一致并且您想要替换第 7 个字符,那么 substring 可能是一个不错的方法,但是您通过使用 data.frame 包装而不使用 stringsAsFactors = FALSE 来制作列字符。您需要先制作列字符:

    df$a <- as.character(df$a)
    substring(df$a, 7, 7) <- "-"
    df
    
    ##               a b
    ## 1 aa_bbb-cc_ddd a
    ## 2 ee_fff-gg_hhh b
    

    【讨论】:

      【解决方案2】:

      你可以使用 sub,

      sub("^([^_]*_[^_]*)_", "\\1-",df$a)
      

      例子:

      > a<-c("aa_bbb_cc_ddd","ee_fff_gg_hhh")
      > b<-c("a","b")
      > df<-data.frame(cbind(a,b))
      > df
                    a b
      1 aa_bbb_cc_ddd a
      2 ee_fff_gg_hhh b
      > df$a <- sub("^([^_]*_[^_]*)_", "\\1-",df$a)
      > df
                    a b
      1 aa_bbb-cc_ddd a
      2 ee_fff-gg_hhh b
      

      【讨论】:

        【解决方案3】:

        这是用- 替换第n_ 的一般方法。

        n <- 2
        
        # create regex pattern based on n
        pat <- paste0("^((?:.*?_){", n - 1, "}.*?)_")
        # [1] "^((?:.*?_){1}.*?)_"
        
        # replace character
        sub("^((?:.*?_){1}.*?)_", "\\1-", df$a, perl = TRUE)
        # [1] "aa_bbb-cc_ddd" "ee_fff-gg_hhh"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-01
          • 2013-11-23
          • 1970-01-01
          • 1970-01-01
          • 2021-04-27
          • 1970-01-01
          相关资源
          最近更新 更多