【问题标题】:Adding a new column in R from matching multiple columns in two dataframes?通过匹配两个数据框中的多列在 R 中添加新列?
【发布时间】:2021-11-27 00:03:03
【问题描述】:

我有两个如下所示的数据框,我正在尝试添加一个新列。我想在数据框 1 中添加一个新列,该列来自匹配数据框 1 中具有不同名称(名称、年龄、国家)和数据框 2 中的(First、Age、BornPlace)的 3 个不同列。

我已尝试过滤并设置一个新列,但我无法为 df1 中的每一行工作。

Data frame 1
   Name    Age    Country   Unrelated  Unrelated 
1  Josh    15     USA       ...        ...      
2  Kyle    18     USA       ...        ...       
3  Pete    17     USA       ...        ...       
4  Devin   19     USA       ...        ...       
5  Josh    15     Canada    ...        ...      

Data frame 2
   First   AgeNum  BornPlace   Unrelated  Unrelated Weight
1  Max     25      USA          ...        ...       150
2  Morgan  28      USA          ...        ...       170
3  Josh    15      USA          ...        ...       140
3  Devin   19      USA          ...        ...       180

Expected Result(Dataframe1 with new column)

   Name    Age    Country   Unrelated  Unrelated Weight
1  Josh    15     USA       ...        ...       140
2  Kyle    18     USA       ...        ...       -   
3  Pete    17     USA       ...        ...       -     
4  Devin   19     USA       ...        ...       180     
5  Josh    15     Canada    ...        ...       -

【问题讨论】:

标签: r dataframe filter mlab


【解决方案1】:

使用data.table包

merge.data.table(
  x = DT1, y = DT2, 
  by.x = c('Name','Age','Country'), 
  by.y = c('First','Age','BornPlace'), 
  all.x = T, all.y = F)

【讨论】:

  • 为什么不简单地使用基本 R 的 merge 而不是 merge.data.table
【解决方案2】:

我们可以使用left_join:

library(dplyr)
left_join(df1, df2, by=c("Name"="First","Age" = "AgeNum","Country" = "BornPlace"))
   Name Age Country Weight
1  Josh  15     USA    140
2  Kyle  18     USA     NA
3  Pete  17     USA     NA
4 Devin  19     USA    180
5  Josh  15  Canada     NA

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多