2015-05-14 34 views
3

我有两个数据帧,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     5 
2     3 
2     4 
2     5 
3     4 
3     5 
4     5 

我想将数据添加到基于是否列X_1,Y_1,X_2,Y_2数字_1和数字匹配df1中数字列中的数字。所以在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] 

我是初学者,所以如果你能解释你提出的步骤,我会非常感激。非常感谢你。

+0

完美,谢谢。根据我的理解,您正在使用df2的x_1和y_1,并添加df1的第2:3列,如果df2 $ number_1和df1 $数字匹配。然后你再次为number_2做这件事。 – tutuahha

+0

@DavidArenburg我认为你的答案是OP想要的。请考虑发表评论作为解决方案 – akrun

回答

1

尝试要么mergeleft_joindplyr

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

或者

library(dplyr) 
left_join(
    left_join(df2[c(1,4)], df1, by=c('number_1'='number')) , 
     df1, by=c('number_2'='number')) 

或者像@大卫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] 
相关问题