R 修改字符串以将1转换为01

R 修改字符串以将1转换为01,r,R,我有一个对象,它是一个带有向量的巨大矩阵,包含一个三个字母的字符串,后跟一个数字,如: "aaa1" , "aaa2" , "aaa3" , "bbb1" ... 我想重新编写此列,以便值1-9包含01-09,如: "aaa01" , "aaa02" , "aaa03" , "bbb01" ... 有没有办法有效地做到这一点 我想出的一个解决方案是使用 a <- substr(object$column , 1 , 3) 有没有更有效的方法来解决这个问题 编辑:我的样本中的数字可

我有一个对象,它是一个带有向量的巨大矩阵,包含一个三个字母的字符串,后跟一个数字,如:

"aaa1" , "aaa2" , "aaa3" , "bbb1" ... 
我想重新编写此列,以便值1-9包含01-09,如:

"aaa01" , "aaa02" , "aaa03" , "bbb01" ... 
有没有办法有效地做到这一点

我想出的一个解决方案是使用

a <- substr(object$column , 1 , 3)
有没有更有效的方法来解决这个问题

编辑:我的样本中的数字可以超过10

一种方法是使用sub

Orig  = c("aaa1" , "aaa2" , "aaa3" , "bbb1")
sub("([a-z])(\\d)\\b", "\\10\\2", Orig)
[1] “aaa01”“aaa02”“aaa03”“bbb01”

一种方式是带接头

Orig  = c("aaa1" , "aaa2" , "aaa3" , "bbb1")
sub("([a-z])(\\d)\\b", "\\10\\2", Orig)

[1] “aaa01”“aaa02”“aaa03”“bbb01”

您可以使用
sub
在第三个字符后添加0,如下所示:

data <- c("aaa1" , "aaa2" , "aaa3" , "bbb1")
sub('^(.{3})(.*)$', '\\10\\2', data)
编辑:

如果要在第3个字符后添加0,但仅针对名称后有1位数字的名称,请更改
*
以指定在出现为1时使用表达式:

v <- c("aaa1" , "aaa2" , "aaa3" , "bbb13", "aaa43")
sub('^(.{3})(.?)$', '\\10\\2', v)
正如@manotheshark所指出的,通过指定第三个字符必须是
w{3}
的单词字符,并且插入0的位置必须是
\\d
的一位数字,您可以更严格地遵守字符串模式匹配规则:

sub('^(\\w{3})(\\d)$', '\\10\\2', v)  

您可以使用
sub
在第三个字符后添加0,如下所示:

data <- c("aaa1" , "aaa2" , "aaa3" , "bbb1")
sub('^(.{3})(.*)$', '\\10\\2', data)
编辑:

如果要在第3个字符后添加0,但仅针对名称后有1位数字的名称,请更改
*
以指定在出现为1时使用表达式:

v <- c("aaa1" , "aaa2" , "aaa3" , "bbb13", "aaa43")
sub('^(.{3})(.?)$', '\\10\\2', v)
正如@manotheshark所指出的,通过指定第三个字符必须是
w{3}
的单词字符,并且插入0的位置必须是
\\d
的一位数字,您可以更严格地遵守字符串模式匹配规则:

sub('^(\\w{3})(\\d)$', '\\10\\2', v)  
基R解

s <- c("aaa1" , "aaa2" , "aaa3" , "bbb1")
gsub("([[:alpha:]]+)","\\10",s)
sA基本R解决方案

s <- c("aaa1" , "aaa2" , "aaa3" , "bbb1")
gsub("([[:alpha:]]+)","\\10",s)

s这是否回答了您的问题?谢谢你的回答!如果数字仅上升到9,则解决方案有效。我再次检查,我的样本值也超过10。它们采用的值如25D看起来不好,但…
paste0(gsub('\\d+','',v1),sprintf('%02d',as.numeric(gsub('\\d+','',v1)))
此解决方案似乎适用于我的案例这是否回答了您的问题?谢谢你的回答!如果数字仅上升到9,则解决方案有效。我再次检查,我的样本值也超过10。它们采用的值为25,看起来不太好,但…
paste0(gsub('\\d+','',v1),sprintf('%02d',as.numeric(gsub('\\d+','',v1)))
此解决方案似乎适合我的情况谢谢您的回答!该解决方案有效,但仅当字符串后面的数字可以取1到9之间的值时。我再次检查,我的样本可以有大于9的数字,也就是说,可以有“aaa35”来确保结果是预期的。最好是显式的,而不是使用通配符:
sub('^(\\w{3})(\\d)$,'\\10\\2',v)
谢谢,我在答案中添加了你的建议谢谢你的回答!该解决方案有效,但仅当字符串后面的数字可以取1到9之间的值时。我再次检查,我的样本的数字可以大于9,也就是说,可以使用“aaa35”来确保结果是预期的。最好是显式的,而不是使用通配符:
sub('^(\\w{3})(\\d)$,'\\10\\2',v)
谢谢,我在答案中添加了您的建议