将两个数据帧匹配两列,并从第三列中提取值

时间:2015-11-03 03:15:45

标签: r

我道歉,如果是一个基本或重复的问题,但我是初学R用户。

我试图将性别和年龄的Dataframe A中的每一行与Dataframe B中的两个相应列相匹配。我知道肯定会有匹配,所以我想从两个不同列的匹配行中提取值在Dataframe B中并将它们存储在Dataframe C中。

Dataframe A                          Dataframe B

ID   Sex   Age   Weight            Row  Sex  Age   X1    X2
1     1    24    36                1    1    24   18.2  12.3
2     1    34    56                2    2    87   15.4  16.5
3     2    87    12                3    1    64   16.3  11.2 
4     2    21    08                4    2    21   15.6  14.7
5     1    64    33                5    1    34   17.7  18.9 
...


Dataframe C
ID   Age   Sex  Weight   Y1   Y2
1     1    24    36     18.2  12.3
2     1    34    56     17.7  18.9           
3     2    87    12     15.4  16.5           
4     2    21    08     15.6  14.7          
5     1    64    33     16.3  11.2                 

我的数据框中有9000个ID。我看过像这样的类似问题

Fill column values by matching values in each row in two dataframe

但我不认为这是我正确应用此代码。 for循环在这里有用吗?

for(i in 1:nrow(ID){
    dfC[i,Y1] <-df2[match(paste(dfA$Sex,dfa$Age),paste(dfB$Sex,dfB$Age)),"X1"]

   dfC[i,Y2] <-df2[match(paste(dfA$Sex,dfa$Age),paste(dfB$Sex,dfB$Age)),"X2"]
}

我知道也建议使用合并函数,但这两个变量实际上并没有在我的数据集中以相同的方式命名。

谢谢!

1 个答案:

答案 0 :(得分:0)

在R中尝试这个bro ... reduce函数

set.seed(1)
list.of.data.frames = list(data.frame(id=1:10, sex=1:10 , age =1:10 , weight=1:20), data.frame(row=5:14, sex=11:20 , age :1:20 , x1:1:10, x2:1:10), data.frame(id=8:14, sex=11:20 , age :1:20 ,weight:20:30, y1:1:10, y2:1:10))
merged.data.frame = Reduce(function(...) merge(..., all=T), list.of.data.frames)
tail(merged.data.frame)