我道歉,如果是一个基本或重复的问题,但我是初学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"]
}
我知道也建议使用合并函数,但这两个变量实际上并没有在我的数据集中以相同的方式命名。
谢谢!
答案 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)