Ren*_*rop 2 regex string r increment dataframe
拥有带有colnames的data.frame
nam <- c("a", paste0("a_", seq(12)))
"a" "a_1" "a_2" "a_3" "a_4" "a_5" "a_6" "a_7" "a_8" "a_9" "a_10" "a_11" "a_12"
Run Code Online (Sandbox Code Playgroud)
如何将数字的数字增加1?
预期结果将是
"a" "a_2" "a_3" "a_4" "a_5" "a_6" "a_7" "a_8" "a_9" "a_10" "a_11" "a_12" "a_13"
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的解决方案看起来非常复杂......是否有比这更简单
increment_names <- function(nam){
where <- regexpr("\\d", nam)
ind <- which(where > 0)
increment <- as.numeric(substring(nam[ind], where[ind])) + 1
substring(nam[ind], where[ind]) <- as.character(increment)
nam
}
> increment_names(nam)
[1] "a" "a_2" "a_3" "a_4" "a_5" "a_6" "a_7" "a_8" "a_9" "a_10" "a_11" "a_12" "a_13"
Run Code Online (Sandbox Code Playgroud)
基础regmatches解决方案
r <- regexpr("\\d+",nam)
regmatches(nam,r) <- as.numeric(regmatches(nam,r))+1
nam
# [1] "a" "a_2" "a_3" "a_4" "a_5" "a_6" "a_7" "a_8" ...
Run Code Online (Sandbox Code Playgroud)
使用gsubfn包你可以做一些简单的事情
library(gsubfn)
gsubfn("\\d+", function(x) as.numeric(x) + 1, nam)
## [1] "a" "a_2" "a_3" "a_4" "a_5" "a_6" "a_7" "a_8" "a_9" "a_10" "a_11" "a_12" "a_13"
Run Code Online (Sandbox Code Playgroud)
这适用于任何模式,并且您不需要假设上面提到的“ nonnumbers_numbers ”模式,例如
(nam <- c("a", paste0(seq(12), "_a")))
## [1] "a" "1_a" "2_a" "3_a" "4_a" "5_a" "6_a" "7_a" "8_a" "9_a" "10_a" "11_a" "12_a"
gsubfn("\\d+", function(x) as.numeric(x) + 1, nam)
## [1] "a" "2_a" "3_a" "4_a" "5_a" "6_a" "7_a" "8_a" "9_a" "10_a" "11_a" "12_a" "13_a"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |