R: Как я могу заменить, скажем, 5-й элемент в строке? - PullRequest
5 голосов
/ 25 июля 2011

Я хотел бы преобразовать строку типа be33szfuhm100060 в BESZFUHM0060.

Чтобы заменить строчные буквы заглавными буквами, я до сих пор использовал функцию gsub.

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

Есть ли способ указать этой функции заменить 3-й и 4-й строковый элемент?Если нет, я был бы очень признателен, если бы вы сказали мне другой способ решения этой проблемы.Может быть, есть и более общее решение для изменения строкового элемента в определенной позиции в заглавную букву, каким бы ни был этот элемент?

Ответы [ 4 ]

9 голосов
/ 25 июля 2011

Пара наблюдений:

Преобразование строки в верхний регистр можно выполнить с помощью toupper, например:

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

. Вы можете использовать substr для извлечения подстроки по символупозиции и paste для объединения строк:

> x <- 'be33szfuhm100060'
> paste(substr(x, 1, 2), substr(x, 5, nchar(x)), sep='')
[1] "beszfuhm100060"
7 голосов
/ 25 июля 2011

В качестве альтернативы, если вы собираетесь делать это много:

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 голосов
/ 25 июля 2011

Вы можете использовать substring для удаления третьего и четвертого элементов.

x <- "be33szfuhm100060"
paste(substring(x, 1, 2), substring(x, 5), sep = "")
0 голосов
/ 25 июля 2011

Если вы знаете, какие части строки вы хотите, основываясь на их позиции, используйте substr или substring. Как я уже упоминал в своем комментарии, вы можете использовать toupper для перевода символов в верхний регистр.

paste( toupper(substr(test,1, 2)),
       toupper(substr(test,5,10)),
       substr(test,12,nchar(test)),sep="")
# [1] "BESZFUHM00060"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...