R:使用条件将数据从行添加到列

R:使用条件将数据从行添加到列,r,R,我有两个数据帧 df1 number x_1 y_1 1 a a 2 a b 3 b b 4 c b 5 c c df2 number_1 x_1 y_1 number_2 x_2 y_2 1 2 1 3 1 4 1

我有两个数据帧

df1

number    x_1    y_1
1         a      a
2         a      b
3         b      b 
4         c      b
5         c      c

df2

number_1  x_1  y_1  number_2  x_2  y_2
1                   2
1                   3
1                   4
1                   5
2                   3
2                   4
2                   5
3                   4
3                   5
4                   5
我想根据number_1和number_2是否与df1中number列中的数字匹配,将数据添加到x_1、y_1、x_2、y_2列中。因此,在df2的前两行中,我应该:

df2

number_1  x_1  y_1  number_2  x_2  y_2
1         a    a    2         a    b 
1         a    a    3         b    b 
我尝试过类似的方法,但它不起作用,而且需要非常长的时间来处理一个非常大的数据集:

for(i in 1:nrow(df1))
  for(j in 1:nrow(df2))
    if(df2$number_1[j] == df1$number[i])
      df2$x_1[j] = df1$x_1[i]
      df2$y_1[j] = df1$y_1[i]
    if(df2$number_2[j] == df1$number_1[i])
      df2$x_1[j] = df1$x_1[i]
      df2$y_1[j] = df$y_1[i]

我是初学者,如果你也能解释一下你建议的步骤,我将不胜感激。非常感谢。

dplyr

merge(df1,
     merge(df1,df2[,c(1,4)], by.x='number', by.y='number_1'),
        by.x='number', by.y='number_2')

或者正如@David Arenburg在评论中提到的那样,
match
可以在这里使用

df2[c("x_1", "y_1")] <- df1[match(df2$number_1, df1$number), 2:3]
df2[c("x_2", "y_2")] <- df1[match(df2$number_2, df1$number), 2:3]

df2[c(“x_1”,“y_1”)]太好了,谢谢。据我所知,您使用的是df2的x_1和y_1,如果df2$number_1和df1$number之间存在匹配,则添加df1的第2:3列。然后你再为第2号做一次。@Davidernburg我想你的答案就是OP想要的答案。请考虑发表评论作为解决方案。
df2[c("x_1", "y_1")] <- df1[match(df2$number_1, df1$number), 2:3]
df2[c("x_2", "y_2")] <- df1[match(df2$number_2, df1$number), 2:3]