2017-07-06 23 views
1

我有兩個DF如下 DF1:如何逗號seprated串用逗號比較一列seprated串等datframe

M1  | 
    -------+ 
    a,b,c | 
    a  | 
    b,c | 
    c,b,a | 
    b,a,d | 
    d,a,b,c| 
    a,d,c | 
    b  | 
    c,d | 
    d,a | 

DF2:

X1  |X2 
--------+--- 
a  |1 
b  |2 
c  |3 
d  |4 
a,b  |5 
a,c  |6 
a,d  |7 
b,c  |8 
b,d  |9 
c,d  |10 
a,b,c |11 
a,c,d |12 
a,b,d |13 
b,c,d |14 
a,b,c,d |15 

有人可以幫我搭配值爲df1 $ M1和df2 $ X1。並把列M2對應的X2值,如下

DF1:

M1  |M2 
--------+--- 
a,b,c |11 
a  |1 
b,c  |8 
c,b,a |11 
b,a,d |13 
d,a,b,c |15 
a,d,c |12 
b  |2 
c,d  |10 
d,a  |7 

有人可以幫助我

回答

0

X1M1必須存儲爲字符。你可以用str(df1)檢查,並在必要時df1 <- as.character(df1$X1)重新分配,與同爲df2

然後,創建新的列按字母順序的值:

df1$Ordered <- sapply(lapply(strsplit(df1$X1, ","), sort),paste,collapse=",")

df2$Ordered <- sapply(lapply(strsplit(df2$M1, ","), sort),paste,collapse=",")

然後執行如下連接:

merge(df1, df2, by="Ordered")

如果要包含df1中的所有值,而不管它們是否具有df2中的匹配值,請添加all.x = TRUE參數。相同的邏輯適用於添加all = TRUE(包括來自兩個數據幀的所有內容)或all.y = TRUE(對於df2)。

+0

仔細看看'd,a,b,c' ='a,b,c,d' – HubertL

+0

我想要一個解決方案,以便它獨立於逗號周圍的值序列 if df1 $ M1 [6 ]是d,a,b,c 它應該給出對應於df2 $ X1 [15](a,b,c,d)的df1 $ M2 [6]的值,即df2 $ X2 [15] – aman

+0

@aman我修改了我的答案,以反映創建要加入的每列的排序版本。 – Mako212