R 将一个数据帧中多列的值匹配到第二个数据帧中的键并创建列

R 将一个数据帧中多列的值匹配到第二个数据帧中的键并创建列,r,merge,match,R,Merge,Match,我有两个数据帧。一个df1如下所示: var.1 var.2 var.3 var.4 1 7 9 1 2 2 4 6 9 7 3 2 NA NA NA var.a var.b var.c var.d 1 1 b c d 2 2 f g h 3 4 j k l 3 7 j k

我有两个数据帧。一个df1如下所示:

 var.1 var.2 var.3 var.4
1     7     9     1     2
2     4     6     9     7
3     2     NA    NA    NA
 var.a var.b var.c var.d
1     1     b     c     d
2     2     f     g     h
3     4     j     k     l
3     7     j     k     z
...
 var.1 var1.b var1.c var1.d ... var.4 var4.b var4.c var4.d
1     7     j     k     z         2     f     g     h
2     4     j     k     l         7     j     k     z
3     2     f     g     h         NA    NA    NA    NA
另一个df2如下所示:

 var.1 var.2 var.3 var.4
1     7     9     1     2
2     4     6     9     7
3     2     NA    NA    NA
 var.a var.b var.c var.d
1     1     b     c     d
2     2     f     g     h
3     4     j     k     l
3     7     j     k     z
...
 var.1 var1.b var1.c var1.d ... var.4 var4.b var4.c var4.d
1     7     j     k     z         2     f     g     h
2     4     j     k     l         7     j     k     z
3     2     f     g     h         NA    NA    NA    NA
df2的a变量中df1的1-4变量中列出的所有值

我想在df1中列出的所有列中匹配df2中的var.a,然后使用新的/组合的列名将这些列添加到df1中。例如,它看起来像这样:

 var.1 var.2 var.3 var.4
1     7     9     1     2
2     4     6     9     7
3     2     NA    NA    NA
 var.a var.b var.c var.d
1     1     b     c     d
2     2     f     g     h
3     4     j     k     l
3     7     j     k     z
...
 var.1 var1.b var1.c var1.d ... var.4 var4.b var4.c var4.d
1     7     j     k     z         2     f     g     h
2     4     j     k     l         7     j     k     z
3     2     f     g     h         NA    NA    NA    NA
提前谢谢

这是一个整洁的解决方案。首先,我定义数据帧

df1% gathervariable,值,-rowname%>% 左接缝f2,by=cvalue=var.a%>% gatherfoo,bar,-variable,-rowname%>% unitegoop,变量,foo%>% spreadgoop,酒吧%>% 选择行名 >警告:度量变量的属性不相同; >它们将被丢弃 这就给了,

>var.1_值var.1_值var.b var.1_值var.c var.1_值var.d var.2_值var.b >1 7 j k z 9 >2 4 j k l 6 >3.2 f g h >var.2_var.c var.2_var.d var.3_var.b var.3_var.c var.3_var.d >1 b c d > 2 9 > 3 >风险值4风险值4风险值b风险值4风险值c风险值4风险值d >1 2 f g h >2 7 j k z > 3 由v0.3.0于2019-05-30创建

这有点复杂,但我会尽力解释

首先,我将行号转换为列,因为这将帮助我在最后将数据放回一起。 df1的格式从宽到长。 我分别基于var.a和var.1(现在称为value)将df2连接到df1。 我又从宽到长。 我将每个数据帧中的变量名组合成一个变量。 最后,我从长格式到宽格式,这是行号方便的地方,并删除行号。