0

特定の ID に Q または A が含まれる一意のドキュメント ID の列:

"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 フィールドに組み込む必要があります。また、Q/A で 2 つの ID がリンクされている場合、新しい 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」列があります。「テーブル」はすでに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 に答える