gpt4 book ai didi

r - 根据开头和结尾的字符数在字符串中插入字符

转载 作者:行者123 更新时间:2023-12-01 07:09:49 26 4
gpt4 key购买 nike

我有一个字符串列表,例如

myvar
[1] "VT" "AK" "AL2" "CA24" "NY12"
[6] "AZ6" "WY4"

我想在所有具有 3 个字符的字符串中的第二个字符之后插入字符“0”,并在所有具有两个字符的字符串中的字符串末尾插入字符“0”,以获得输出
myvar
[1] "VT01" "AK01" "AL02" "CA24" "NY12"
[6] "AZ06" "WY04"

我以为我可以使用正则表达式前瞻和后视在一行中完成此操作,但除此之外我无能为力:
sub('(?<=.{2})(?=.{1})', '0', myvar, perl=T)

myvar
[1] "VT" "AK" "AL002" "CA024" "NY012"
[6] "AZ06" "WY04"

任何帮助将非常感激,

西蒙娜

最佳答案

我们可以使用 sub 提取数字部分, 将字符串转换为 numeric类,将 NA 值(从强制)更改为 1,并使用 sprintf粘贴非数字 ( sub('\\d+', ...) ) 和格式化的数字部分。

 v1 <- as.numeric(sub('\\D+', '', myvar))
v1[is.na(v1)] <- 1
sprintf('%s%02d', sub('\\d+', '', myvar),v1)
#[1] "VT01" "AK01" "AL02" "CA24" "NY12" "AZ06" "WY04"

或使用 gsubfn .我们创建了一个 ifelse那些没有任何数字元素并粘贴 1 的元素的条件。我们匹配 gsubfn 中的数字部分( \\d+ ),用 sprintf 格式化替换它.
 library(gsubfn)
gsubfn('\\d+', ~sprintf('%02d', as.numeric(x)),
ifelse(!grepl('\\d+', myvar), paste0(myvar, 1), myvar))
#[1] "VT01" "AK01" "AL02" "CA24" "NY12" "AZ06" "WY04"

或者更紧凑的版本使用 sub将 1 附加到那些没有数字部分的元素
 gsubfn('\\d+', ~sprintf('%02d', as.numeric(x)) ,sub('(?<=[A-Z])$', '1', myvar, perl=TRUE))
#[1] "VT01" "AK01" "AL02" "CA24" "NY12" "AZ06" "WY04"

或者在没有环顾的情况下使它更紧凑,
gsubfn('\\d+', ~sprintf('%02d', as.numeric(x)), sub('(\\D+)$', '\\11', myvar))
#[1] "VT01" "AK01" "AL02" "CA24" "NY12" "AZ06" "WY04"

关于r - 根据开头和结尾的字符数在字符串中插入字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33168772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com