[英]R: Using gsub to replace a digit matched by pattern (n) with (n-1) in character vector
我试图匹配字符向量中的最后一位数字并将其替换为匹配的数字 - 1.我相信gsub是我需要使用但我无法弄清楚要用什么作为'替换'参数。 我可以使用以下匹配最后一个数字:
gsub('[0-9]$', ???, chrvector)
但我不知道如何用自己替换匹配的数字 - 1。
任何帮助将非常感激。
谢谢。
我们可以使用gsubfn
轻松完成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")
假设最后一位数不为零,
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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.