【发布时间】:2016-02-03 02:44:17
【问题描述】:
如果是基本问题或重复问题,我深表歉意,但我是 R 初学者。
我正在尝试将 Dataframe A 中的每一行按 Sex 和 Age 匹配到 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"]
}
我知道还建议了合并函数,但是这两个变量在我的数据集中实际上并没有以相同的方式命名。
谢谢!
【问题讨论】:
-
为什么不重命名变量以使键名匹配?如果确实有问题,请使用合并中的 by.x 和 by.y 键。
-
当我尝试这个时,我丢失了大约 700 个观察值。我不确定其原因,因为 DFA 中的每个年龄和性别差异都应该在 DFB 中具有相应的年龄和性别值。如果 DFB 中的变量是“因素”而 DFA 中的变量是“num”,这有关系吗?
-
将 all=TRUE 添加到您的合并调用中,您可以自己查看问题所在。我认为非关键变量的类型无关紧要。
标签: r