如何用一系列数字替换字符特定部分中的值

How to replace values in a specific part of character with a range of numbers

我似乎无法弄清楚如何替换向量中字符的特定值。 我的载体是:

str(cryostick_1)
 chr [1:21] "4490015" "44900151" "44900151" "44900151" "44900151" "44900152" "44900152" "44900152" ...

向量中每个值的第 4 到第 6 部分都是“001”。我需要将这些全部更改为 002(直到向量末尾)、003、004....直到 137

有没有办法用 for 循环或 lapply 来做到这一点?此时此刻,当我什至尝试创建从 002 到 137 的范围时,它会删除前 2 个零:002 --> 2

非常感谢任何帮助

提前谢谢你。输出应该是这样的:

4490015
44900151
44900151
.
.
.
4490025
44900251
44900251
.
.
.
4490035

依此类推直到 137

我已经看到其他人已经回复了,但是基于我之前写的内容,这应该可以完成返回更长向量的工作。它会根据初始向量的长度自动概括。

library(stringr)

cryostick_1 = c( "4490015", "44900151", "44900151", "44900151", 
                 "44900151", "44900152", "44900152", "44900152" )

target = str_sub( cryostick_1, 4, 6 )
new = str_pad( 1:length(target), width = 3, pad = "0" )

newlong = rep( new, each = length(new) )

cryostick_1_long = rep(cryostick_1, each = length(new) )

new_cryostick_1 = str_replace( cryostick_1_long, 
                               str_sub( str_sub( cryostick_1_long, 4, 6 ) ), 
                               newlong )
new_cryostick_1
#>  [1] "4490015"  "4490015"  "4490015"  "4490015"  "4490015"  "4490015" 
#>  [7] "4490015"  "4490015"  "44900251" "44900251" "44900251" "44900251"
#> [13] "44900251" "44900251" "44900251" "44900251" "44900351" "44900351"
#> [19] "44900351" "44900351" "44900351" "44900351" "44900351" "44900351"
#> [25] "44900451" "44900451" "44900451" "44900451" "44900451" "44900451"
#> [31] "44900451" "44900451" "44900551" "44900551" "44900551" "44900551"
#> [37] "44900551" "44900551" "44900551" "44900551" "44900652" "44900652"
#> [43] "44900652" "44900652" "44900652" "44900652" "44900652" "44900652"
#> [49] "44900752" "44900752" "44900752" "44900752" "44900752" "44900752"
#> [55] "44900752" "44900752" "44900852" "44900852" "44900852" "44900852"
#> [61] "44900852" "44900852" "44900852" "44900852"

reprex package (v0.3.0)

于 2020-12-04 创建

从问题中看不清楚,但也许你正在寻找这个:

t(sapply(seq_along(cryostick_1), function(x) {
       paste0(substr(cryostick_1, 1, 3), 
       sprintf("%03d", x), 
       substr(cryostick_1, 7, 8))}))
#>      [,1]      [,2]       [,3]       [,4]       [,5]       [,6]      
#> [1,] "4490015" "44900151" "44900151" "44900151" "44900151" "44900152"
#> [2,] "4490025" "44900251" "44900251" "44900251" "44900251" "44900252"
#> [3,] "4490035" "44900351" "44900351" "44900351" "44900351" "44900352"
#> [4,] "4490045" "44900451" "44900451" "44900451" "44900451" "44900452"
#> [5,] "4490055" "44900551" "44900551" "44900551" "44900551" "44900552"
#> [6,] "4490065" "44900651" "44900651" "44900651" "44900651" "44900652"
#> [7,] "4490075" "44900751" "44900751" "44900751" "44900751" "44900752"
#> [8,] "4490085" "44900851" "44900851" "44900851" "44900851" "44900852"
#>      [,7]       [,8]      
#> [1,] "44900152" "44900152"
#> [2,] "44900252" "44900252"
#> [3,] "44900352" "44900352"
#> [4,] "44900452" "44900452"
#> [5,] "44900552" "44900552"
#> [6,] "44900652" "44900652"
#> [7,] "44900752" "44900752"
#> [8,] "44900852" "44900852"

还是这个?

as.vector(sapply(seq_along(cryostick_1), function(x) {
       paste0(substr(cryostick_1, 1, 3), 
       sprintf("%03d", x), 
       substr(cryostick_1, 7, 8))}))
#>  [1] "4490015"  "44900151" "44900151" "44900151" "44900151" "44900152"
#>  [7] "44900152" "44900152" "4490025"  "44900251" "44900251" "44900251"
#> [13] "44900251" "44900252" "44900252" "44900252" "4490035"  "44900351"
#> [19] "44900351" "44900351" "44900351" "44900352" "44900352" "44900352"
#> [25] "4490045"  "44900451" "44900451" "44900451" "44900451" "44900452"
#> [31] "44900452" "44900452" "4490055"  "44900551" "44900551" "44900551"
#> [37] "44900551" "44900552" "44900552" "44900552" "4490065"  "44900651"
#> [43] "44900651" "44900651" "44900651" "44900652" "44900652" "44900652"
#> [49] "4490075"  "44900751" "44900751" "44900751" "44900751" "44900752"
#> [55] "44900752" "44900752" "4490085"  "44900851" "44900851" "44900851"
#> [61] "44900851" "44900852" "44900852" "44900852"

还是这个?

data.frame(x = as.vector(sapply(seq_along(cryostick_1), function(x) {
       paste0(substr(cryostick_1, 1, 3), 
       sprintf("%03d", x), 
       substr(cryostick_1, 7, 8))})))
#>           x
#> 1   4490015
#> 2  44900151
#> 3  44900151
#> 4  44900151
#> 5  44900151
#> 6  44900152
#> 7  44900152
#> 8  44900152
#> 9   4490025
#> 10 44900251
#> 11 44900251
#> 12 44900251
#> 13 44900251
#> 14 44900252
#> 15 44900252
#> 16 44900252
#> 17  4490035
#> 18 44900351
#> 19 44900351
#> 20 44900351
#> 21 44900351
#> 22 44900352
#> 23 44900352
#> 24 44900352
#> 25  4490045
#> 26 44900451
#> 27 44900451
#> 28 44900451
#> 29 44900451
#> 30 44900452
#> 31 44900452
#> 32 44900452
#> 33  4490055
#> 34 44900551
#> 35 44900551
#> 36 44900551
#> 37 44900551
#> 38 44900552
#> 39 44900552
#> 40 44900552
#> 41  4490065
#> 42 44900651
#> 43 44900651
#> 44 44900651
#> 45 44900651
#> 46 44900652
#> 47 44900652
#> 48 44900652
#> 49  4490075
#> 50 44900751
#> 51 44900751
#> 52 44900751
#> 53 44900751
#> 54 44900752
#> 55 44900752
#> 56 44900752
#> 57  4490085
#> 58 44900851
#> 59 44900851
#> 60 44900851
#> 61 44900851
#> 62 44900852
#> 63 44900852
#> 64 44900852