如何将一列中的逗号分隔字符串与其他数据帧中的逗号分隔字符串进行比较

How to compare comma separated string in one column with the comma separated strings other dataframe

我有两个 df 如下 df1:

    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 中的值。并将对应的X2值放入M2列如下

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

谁能帮帮我

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.