我有两个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
有人可以帮助我
答案 0 :(得分:0)
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
。