R:使用gsub将字符(n)匹配的数字替换为字符向量中的(n-1)

时间:2017-01-20 11:25:59

标签: r

我正在尝试匹配字符向量中的最后一位数字并将其替换为匹配的数字 - 1.我相信gsub是我需要使用的但我无法弄清楚要使用什么作为'替换& #39;论点。我可以使用以下方式匹配最后一个号码:

gsub('[0-9]$', ???, chrvector)

但我不知道如何用自己替换匹配的号码 - 1。

非常感谢任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:3)

我们可以使用gsubfn

轻松完成此操作
library(gsubfn)
gsubfn("([0-9]+)", ~as.numeric(x)-1, chrvector)
#[1] "str97"    "v197exdf"

或者是最后一位数

gsubfn("([0-9])([^0-9]*)$", ~paste0(as.numeric(x)-1, y), chrvector2)
#[1] "str97"      "v197exdf"   "v33chr138d"

数据

chrvector <- c("str98", "v198exdf")
chrvector2 <-  c("str98", "v198exdf", "v33chr139d")

答案 1 :(得分:0)

假设最后一位数不为零,

chrvector <- as.character(1:5)
chrvector
#[1] "1" "2" "3" "4" "5"
chrvector <- paste(chrvector, collapse='') # convert to character string

chrvector <- paste0(substring(chrvector,1, nchar(chrvector)-1), as.integer(gsub('.*([0-9])$', '\\1', chrvector))-1)
unlist(strsplit(chrvector, split=''))
# [1] "1" "2" "3" "4" "4"

即使您的最后一位数为零,这也有效:

chrvector <- c(as.character(1:4), '0') # [1] "1" "2" "3" "4" "0"
chrvector <- paste(chrvector, collapse='')    
chrvector <- as.character(as.integer(chrvector)-1)
unlist(strsplit(chrvector, split=''))
# [1] "1" "2" "3" "3" "9"