【问题标题】:Using R to match values in a common column for two dataframes and then writing across corresponding data使用 R 匹配两个数据帧的公共列中的值,然后跨相应数据写入
【发布时间】:2018-10-03 09:26:42
【问题描述】:

我有两个数据框。

第一个 (df1) 有一列记录每行的旧 ID 号和一列具有相应的新 ID 号。这是一个更大的数据集。

第二个 (df2) 有一列,每行只有旧的 ID 号。我想在第二个数据框中创建一个新列,其中包含在 df1 中找到的相应新 ID 号。

这是数据集的一个虚拟示例:

df1

OldID     NewID Numofsh Loc
ID10000   4853  158     Bath
ID10001   5091  43      York
ID10002   5205  12      Cambridge
ID10003   4897  6       London
ID10004   6488  8       Edinburgh

df2

OldID    CPH
ID10004  77/567/4433
ID10001  66/123/4567

以及我想要的最终 df2 的虚拟示例

 OldID    CPH         NewID
ID10004  77/567/4433  6488
ID10001  66/123/4567  5091

【问题讨论】:

    标签: r matching


    【解决方案1】:

    使用matchdf1 进行子集化,并使用$ 提取“NewID”的值。

    df2$NewID <- df1[match(df2$OldID, df1$OldID), ]$NewID
    df2
    #    OldID         CPH NewID
    #1 ID10004 77/567/4433  6488
    #2 ID10001 66/123/4567  5091
    

    数据

    df1 <- read.table(text = "OldID     NewID Numofsh Loc
    ID10000   4853  158     Bath
    ID10001   5091  43      York
    ID10002   5205  12      Cambridge
    ID10003   4897  6       London
    ID10004   6488  8       Edinburgh", header = TRUE)
    
    df2 <- read.table(text = "OldID    CPH
    ID10004  77/567/4433
    ID10001  66/123/4567", header = TRUE)
    

    【讨论】:

      【解决方案2】:

      使用dplyr::left_join():

      library(dplyr)
      df3 <- df2 %>%
        left_join(df1, by = 'OldID') %>%
        select(-c(Numofsh, Loc))
      

      产量

          OldID         CPH NewID
      1 ID10004 77/567/4433  6488
      2 ID10001 66/123/4567  5091
      

      【讨论】:

        猜你喜欢
        • 2021-11-27
        • 2015-02-14
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多