根据现有ID条件创建唯一ID

时间:2013-05-08 14:24:00

标签: r grep uniqueidentifier

我是一列唯一的文档ID,其中某些ID包含Q或A:

"702-591|source-871987", "702-591|source-872066", 
"702-591|source-872336", "702-591|source-872557", 
"702-591|source-873368", "702-591|source-876216", 
"702-591|source-907269", "702-591|source-10754A", "702-591|source-10754Q", 
"702-591|source-118603A", "702-591|source-118603Q", "702-591|source-119738A"

我想创建一个更简单的唯一ID列(很简单 - table$ID <- c(1:nrow(table)))。但如果现有列包含Q或A,我希望将Q / A合并到新ID字段中。此外,如果两个ID通过Q / A链接,我希望新ID显示为1Q或1A。例如,记录8&amp; 9是:"702-591|source-10754A", "702-591|source-10754Q"。他们的新ID将是8A&amp;分别是8Q。记录1-5将具有1-5的新ID。我需要在这里加入Grep命令吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这可能有点长,但我认为它有效。您必须安装stringr包才能使用它。

require(stringr)
df <- data.frame(str_match(tab$old_id,"(.*[[:digit:]]+)([[:alpha:]]?)"))
names(df) <- c("old_id","nonqa","qa")
df2<- data.frame(nonqa=unique(df$nonqa))
df2$base <- seq_along(df2$nonqa)
df3<- merge(df,df2)
df3$id=paste(df3$base,df3$qa,sep="")

最后,您在最终数据框中有“old_id”和“id”列。我把你的表读到“tab”,因为“table”已经是R中的一个函数。对于其他任何回答这个问题的人来说,这里是:

tab = data.frame(old_id=c("702-591|source-871987", "702-591|source-872066", 
"702-591|source-872336", "702-591|source-872557", 
"702-591|source-873368", "702-591|source-876216", 
"702-591|source-907269", "702-591|source-10754A", "702-591|source-10754Q", 
"702-591|source-118603A", "702-591|source-118603Q", "702-591|source-119738A"))