如何将一列中的逗号分隔字符串与其他数据帧中的逗号分隔字符串进行比较
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
谁能帮帮我
X1
和 M1
必须存储为字符。您可以检查 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
.
我有两个 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
谁能帮帮我
X1
和 M1
必须存储为字符。您可以检查 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
.