r—根据已有的ID条件创建唯一的ID



一列唯一的文档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 &9个是:"702-591|source-10754A", "702-591|source-10754Q"。他们的新id将是8A &分别8问。记录1-5的新id为1-5。我需要在这里合并Grep命令吗?

谢谢!

这可能有点长,但我认为它是有效的。你必须安装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"one_answers"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"))

最新更新