R代码生成带有前缀的唯一ID?

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

我有一个名为“pipel”的表,其中包含10000多行。我想添加一个ID列,为每一行分配一个唯一的ID。唯一ID的长度必须为30位,并以“AKM_CC_Test_”开头。我使用下面的代码作为起点,但不确定如何格式化以添加前缀并使其长度为30位

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"