R:我怎样才能代替字符串中的第5个元素?

时间:2011-07-25 16:47:49

标签: string r replace

我想将be33szfuhm100060这样的字符串转换为BESZFUHM0060。

为了用大写字母替换小写字母,我到目前为止使用了gsub函数。

test1=gsub("be","BE",test)

有没有办法告诉这个函数替换第3和第4个字符串元素?如果没有,如果你能告诉我另一种解决这个问题的方法,我真的很感激。也许还有一个更通用的解决方案,将某个位置的字符串元素更改为大写字母,无论该元素是什么?

4 个答案:

答案 0 :(得分:9)

有几点意见:

可以使用toupper将字符串转换为大写,例如:

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

您可以使用substr按字符位置提取子字符串,使用paste来连接字符串:

> x <- 'be33szfuhm100060'
> paste(substr(x, 1, 2), substr(x, 5, nchar(x)), sep='')
[1] "beszfuhm100060"

答案 1 :(得分:7)

作为替代方案,如果你要做这个很多:

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

答案 2 :(得分:2)

您可以使用substring删除第三和第四个元素。

x <- "be33szfuhm100060"
paste(substring(x, 1, 2), substring(x, 5), sep = "")

答案 3 :(得分:0)

如果根据位置知道所需字符串的哪些部分,请使用substrsubstring。正如我在评论中提到的,您可以使用toupper将字符强制为大写。

paste( toupper(substr(test,1, 2)),
       toupper(substr(test,5,10)),
       substr(test,12,nchar(test)),sep="")
# [1] "BESZFUHM00060"