代码之家  ›  专栏  ›  技术社区  ›  dragon_cake

如何将一个excel数据表与只有部分列匹配的主excel表合并?

  •  0
  • dragon_cake  · 技术社区  · 5 月前

    在开始之前,我会说我对R和编程仍然很陌生,但我正在循序渐进,这项任务是我最具挑战性的任务之一。

    我有两个excel电子表格,我正试图将其中一个(工作表)合并到主表中。匹配的列仅包括ID和日期。还有一个额外的复杂性,即主表可能不包括工作表上最近添加的所有ID,但我仍然希望将新的ID和相关信息作为新行添加到主表中。

    我怎样才能在R中最好地做到这一点?

    希望这个解释有意义,谢谢你的帮助!

    到目前为止,我只是按照其他人的建议尝试使用了grur:map_dfr,但它似乎只适用于具有匹配列的工作表(至少在我尝试时是这样)。

    以下是示例表格!

    主工作表中未添加/缺少#78作为参与者的工作表

    身份证件 日期 波浪 笔记 数据_1 数据_2 数据_3
    58 1/18/2014 Y 47.5 384.3 394.3
    144 1/18/2014 Y2 65.3 38.3 90.4
    58 4/18/2014 Y2 499.2 293.2 22.3
    78 1/19/2018 Y5 24.4 22.1 12.1

    主表

    身份证件 日期 波浪 数据_4 数据_5 数据_6 数据_7 诊断 年龄 状态 性别
    58 1/18/2014 Y1 39.4 3959.3 474.3 283.2 否定 45 ... M
    144 1/18/2014 Y2 484.3 4849.2 383.3 393.3 积极 80 ... F
    58 4/18/2015 Y2 501.6 394.2 2394.2 290.3 积极 46 ... M

    理想情况下,从工作表中,我想在主表中的特定位置插入Data_1、Data_2和Data_3,例如 波动 数据_4。

    1 回复  |  直到 5 月前
        1
  •  0
  •   Susan Switzer    5 月前
    library(tidyverse)
    
    otherSheet <- data.frame(ID = c(58, 144, 58, 78), 
                              Date = c('1/18/2014', '1/18/2014', 
                                       '4/18/2014', '1/19/2018'), 
                              Wave = c('Y', 'Y2', 'Y2', 'Y5'), 
                              Notes = rep('',4 ), 
                              Data_1 = c(47.5, 65.3, 499.2, 24.4), 
                              Data_2 = c(384.2, 38.2, 293.2, 22.1), 
                              Data_3 = c(394.3, 90.4, 22.3, 12.1))
    
    masterSheet <- data.frame(ID = c(58, 144, 58), 
                              Date = c('1/18/2014', '1/18/2014', 
                                       '4/18/2014'), 
                              Wave = c('Y', 'Y2', 'Y2'), 
                              Data_4 = c(39.4, 484.3, 501.6), 
                              Data_5 = c(3959.3, 4849.2, 394.2), 
                              Data_6 = c(474.3, 383.3, 2394.2), 
                              Diagnosis = c('Negative', 'Postive', 'Positive'), 
                              Age = c(45, 80, 46), 
                              Status = rep('...', 3), 
                              Gender = c('M', 'F', 'M'))
    
    combinedSheets <- masterSheet %>% 
     full_join(otherSheet)
    

    sample