如何用一系列数字替换字符特定部分中的值
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
我似乎无法弄清楚如何替换向量中字符的特定值。 我的载体是:
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