【问题标题】:Match two data frames by two columns and extract values from third column按两列匹配两个数据框并从第三列中提取值
【发布时间】: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


【解决方案1】:

试试这个兄弟...在 R 中为此类操作减少函数

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2014-11-05
    • 1970-01-01
    相关资源
    最近更新 更多