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

R 按两列匹配两个数据帧,并从第三列中提取值,r,R,我很抱歉,如果是一个基本的或重复的问题,但我是一个初学者R用户 我正在尝试按性别和年龄将数据框A中的每一行与数据框B中的两个对应列进行匹配。我知道肯定会有匹配,因此我想从数据框B中两个不同列的匹配行中提取值,并将它们存储在数据框C中 Dataframe A Dataframe B ID Sex Age Weight Row Sex Age X1 X2 1 1 24 36

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

我正在尝试按性别和年龄将数据框A中的每一行与数据框B中的两个对应列进行匹配。我知道肯定会有匹配,因此我想从数据框B中两个不同列的匹配行中提取值,并将它们存储在数据框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。我看过类似的问题,比如这个

但是我不认为我正确地应用了这个代码。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"]
}
for(1中的i:nrow(ID){

dfC[i,Y1]为此类操作尝试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)

为什么不重命名变量,使键的名称匹配?如果确实有问题,请使用merge中的by.x和by.y键。当我尝试此操作时,我丢失了大约700个观察值。我不确定原因,因为DFA中的每个年龄和性别变化都应该在DFB中具有相应的年龄和性别值。如果DFB中的变量是“factors”而DFA中的变量是“num”?将all=TRUE添加到合并调用中,您可以自己看到问题所在。我认为非关键变量的类型不重要。