R代码生成带有前缀的唯一ID?
我有一个名为“pipel”的表,其中包含10000多行。我想添加一个ID列,为每一行分配一个唯一的ID。唯一ID的长度必须为30位,并以“AKM_CC_Test_”开头。我使用下面的代码作为起点,但不确定如何格式化以添加前缀并使其长度为30位R代码生成带有前缀的唯一ID?,r,R,我有一个名为“pipel”的表,其中包含10000多行。我想添加一个ID列,为每一行分配一个唯一的ID。唯一ID的长度必须为30位,并以“AKM_CC_Test_”开头。我使用下面的代码作为起点,但不确定如何格式化以添加前缀并使其长度为30位 id <- rownames(pipel) pipel <- cbind(id=id, pipel) id您可以对序列使用:或seq,您可以使用粘贴或粘贴0预加前导文本。问题的核心是用前导0填充数字 你的选择是: stri_pad来自stri
id <- rownames(pipel)
pipel <- cbind(id=id, pipel)
id您可以对序列使用:
或seq
,您可以使用粘贴或粘贴0
预加前导文本。问题的核心是用前导0填充数字
你的选择是:
stri_pad
来自stringi
(更直观)
stru pad
来自stringr
(更直观)
sprintf
(无需软件包)
formatC
(如果您熟悉C的printf
,这很好)
请注意,在某些情况下,尽管不是这个特殊情况,但必须禁用序列中数字的科学符号。这可以通过options
或通过devtools
中的\u options
实现
请参阅每一个示例
使用formatC
:
uid <- paste0("AKM_CC_Test_", formatC(1:10000, width = 18, format = "d", flag = "0"))
head(uid)
使用stringr
包:
uid <- paste0("AKM_CC_Test_", str_pad(1:10000, 18, pad = "0")) # remember to load stringr
head(uid)
使用sprintf
:
head(sprintf("%s%0*d", "AKM_CC_Test_", 18, 1:10000))
使用包装stringi
中的stri\u pad
:
uid <- paste0("AKM_CC_Test_", stri_pad(1:10000, 18, pad = "0")) # remember to load stringi
head(uid)
您可以使用sprintf()
。这将创建一个30个字符的字符串,以“AKM\u CC\u Test”
开头,以带前导零的1:nrow(pipel)
序列结尾
x <- "AKM_CC_Test_"
sprintf("%s%0*d", x, 30 - nchar(x), 1:nrow(pipel))
试试stringr::str_pad(“1”,30,pad=“0”)
你为什么把我的答案加在你的答案上?@RichScriven你在说什么?我在链接的帖子上使用了填充选项列表,我做了不同的操作,并对它们进行了比较/对比。这只是一个功能丰富的问题,不是你的答案。哦,现实点。这是一样的。@RichScriven哇。我只能说哇。我在你前面回答,把一个消息来源和一个选项列表联系起来,然后一个接一个地应用所有选项,你会抱怨和否决,因为你使用的选项在著名的列表上?还有其他我应该知道的禁区吗?我还可以使用谢谢上面的代码工作并创建了我正在寻找的ID,但是当我尝试使用write.table(pipel,“pipel9.txt”,sep=“”,quote=FALSE,col.names=TRUE)编写新表时,ID列没有显示在表中。@好奇-你使用了什么代码添加该列?@Rich Scriven-我尝试使用:newtable
[1] "AKM_CC_Test_000000000000000001" "AKM_CC_Test_000000000000000002" "AKM_CC_Test_000000000000000003" "AKM_CC_Test_000000000000000004"
[5] "AKM_CC_Test_000000000000000005" "AKM_CC_Test_000000000000000006"
uid <- paste0("AKM_CC_Test_", stri_pad(1:10000, 18, pad = "0")) # remember to load stringi
head(uid)
[1] "AKM_CC_Test_000000000000000001" "AKM_CC_Test_000000000000000002" "AKM_CC_Test_000000000000000003" "AKM_CC_Test_000000000000000004"
[5] "AKM_CC_Test_000000000000000005" "AKM_CC_Test_000000000000000006"
x <- "AKM_CC_Test_"
sprintf("%s%0*d", x, 30 - nchar(x), 1:nrow(pipel))
x <- "AKM_CC_Test_"
sprintf("%s%0*d", x, 30 - nchar(x), 1:5)
# [1] "AKM_CC_Test_000000000000000001" "AKM_CC_Test_000000000000000002"
# [3] "AKM_CC_Test_000000000000000003" "AKM_CC_Test_000000000000000004"
# [5] "AKM_CC_Test_000000000000000005"