0

I 一列唯一文档 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 和 8Q。记录 1 -5 将只有 1-5 的新 ID。我需要在这里合并 Grep 命令吗?

谢谢!

4

1 回答 1

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"))
于 2013-05-08T14:51:42.077 回答