R: How can I replace let's say the 5th element within a string?

后端 未结 4 1881
面向向阳花
面向向阳花 2021-01-13 09:32

I would like to convert the a string like be33szfuhm100060 into BESZFUHM0060.

In order to replace the small letters with capital letters I\'ve so far used the gsub f

相关标签:
4条回答
  • 2021-01-13 10:01

    You can use substring to remove the third and fourth elements.

    x <- "be33szfuhm100060"
    paste(substring(x, 1, 2), substring(x, 5), sep = "")
    
    0 讨论(0)
  • 2021-01-13 10:01

    If you know what portions of the string you want based on their position(s), use substr or substring. As I mentioned in my comment, you can use toupper to coerce characters to uppercase.

    paste( toupper(substr(test,1, 2)),
           toupper(substr(test,5,10)),
           substr(test,12,nchar(test)),sep="")
    # [1] "BESZFUHM00060"
    
    0 讨论(0)
  • 2021-01-13 10:13

    As an alternative, if you are going to be doing this alot:

    String <- function(x="") {
      x <- as.character(paste(x, collapse=""))
      class(x) <- c("String","character")
      return(x)
    }
    
    "[.String" <- function(x,i,j,...,drop=TRUE) {
      unlist(strsplit(x,""))[i]
    }
    "[<-.String" <- function(x,i,j,...,value) {
      tmp <- x[]
      tmp[i] <- String(value)
      x <- String(tmp)
      x
    }
    print.String <- function(x, ...) cat(x, "\n")
    ## try it out
    > x <- String("be33szfuhm100060")
    > x[3:4] <- character(0)
    > x
    beszfuhm100060
    
    0 讨论(0)
  • 2021-01-13 10:21

    A couple of observations:

    Cnverting a string to uppercase can be done with toupper, e.g.:

    > toupper('be33szfuhm100060')
    > [1] "BE33SZFUHM100060"
    

    You could use substr to extract a substring by character positions and paste to concatenate strings:

    > x <- 'be33szfuhm100060'
    > paste(substr(x, 1, 2), substr(x, 5, nchar(x)), sep='')
    [1] "beszfuhm100060"
    
    0 讨论(0)
提交回复
热议问题