2017-10-06 7 views
-1

私はタンパク質の受託番号でマージしたい2つのデータフレームを持っています。R:サブストリングの一致に基づいてデータフレームをマージする

df1は、遺伝子に関連するタンパク質アクセッション番号(およびこれらの名前のいくつかがある)を含むデータフレームである。したがって、df1には、これらの名前の「リスト」がセミコロンで区切られて文字列形式で格納され、df1で再び発生しない一意の値を持ちます。

df2: 

Name b.value 
A2 ... 
B3 ... 
B4 ... 

両方を:

df1: 

Name    a.value 
A1;B1;C1   ... 
A2     ... 
A3;B3    ... 
A4;B4;C4;D4;E4;F4 ... 

DF2のみ行ごとに名前のこれらのアクの1つを含むデータフレームである:私は "A1、B1、..." 以下のようにこれらの名前を書かれていますdf1とdf2には他の列が含まれています。

行が一致するように、次のように名前の一つは、DF1とDF2でアク名が存在する場合、私はマージされ、マージされたデータフレームをしたいと思います:

A2 A2     a.value b.value 
B3 A3;B3    ...  ... 
B4 A4;B4;C4;D4;E4;F4 ...  ... 

、両方のデータから、もちろん、他の列フレームが含まれています。

何か提案をいただければ幸いです。私が何かを詳しく説明する必要がある場合はお知らせください。

ありがとうございます!

答えて

1

これは、要求された出力できます:

l <- strsplit(as.character(df1$Name), ';') 
df1new <- data.frame(Name = unlist(l), Name.string = rep(df1$Name, lengths(l))) 
merge(df2, df1new, by = 'Name', all.x = TRUE) 

結果:

Name  Name.string 
1: A2    A2 
2: B3    A3;B3 
3: B4 A4;B4;C4;D4;E4;F4 
関連する問題