2017-10-06 122 views
-1

我有兩個數據框,我想通過蛋白質登錄名進行合併。R:基於子串匹配合並數據幀

df1是一個數據框,其中包含與基因相關的蛋白質登錄名(以及其中的幾個名稱)。因此,df1包含這些名稱的「列表」,這些名稱以字符串格式以分號分隔,而唯一值不會再出現在df1中。我已經寫了這些名字爲 「A1,B1,...」 下面:

df1: 

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

DF2只包含這些加入每行命名的一個數據幀:

df2: 

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

兩個df1和df2包含其他列。

我想合併的數據幀進行合併,以便行是匹配的,如果在DF2入世名存在的名字之一DF1如下:

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