• 【R语言】两个/N个数据合并merge函数


    两个数据框合并

    data1=data.frame(
      names = c('AAA',       'CCC', 'DDD', 'EEE',  'FFF' ),
      logFC = c(3, -0.4, 5, 0.4, -3 ),
      bmi = c('正常',        '正常','超重','肥胖','正常')
    )
    data2=data.frame(
      names = c('AAA','BBB',  'CCC', 'DDD', 'EEE'          ),
      gender = c(1, 2, 1, 2, 1),    #1=男 2=女
      bmi = c('正常','低体重','正常','超重','肥胖'          )
    )
    
    merge(data1,data2,all=TRUE)
    # 同样结果,可以不用加by
    merge(data1,data2,all=TRUE,by = intersect(names(data1), names(data2)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    namesbmilogFCgender
    AAA正常31
    BBB低体重NA2
    CCC正常-0.41
    DDD超重52
    EEE肥胖0.41
    FFF正常-3NA

    dplyr::full_join函数情况

    dplyr::full_join(data1,data2)
    
    • 1

    dplyr::full_join函数情况,如果加by,会出现重复的变量名为 .x .y

    dplyr::full_join(data1,data2,by=c("names"))
    
    > dplyr::full_join(data1,data2)      
    Joining, by = c("names", "bmi")
      names logFC    bmi gender
    1   AAA   3.0   正常      1
    2   CCC  -0.4   正常      1
    3   DDD   5.0   超重      2
    4   EEE   0.4   肥胖      1
    5   FFF  -3.0   正常     NA
    6   BBB    NA 低体重      2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    nameslogFCbmi.xgenderbmi.y
    AAA3正常1正常
    CCC-0.4正常1正常
    DDD5超重2超重
    EEE0.4肥胖1肥胖
    FFF-3正常NANA
    BBBNANA2低体重

    R merge()dplyr join()

    dplyrbase
    inner_join(df1, df2)merge(df1, df2)
    left_join(df1, df2)merge(df1, df2, all.x = TRUE)
    right_join(df1, df2)merge(df1, df2, all.y = TRUE)
    full_join(df1, df2)merge(df1, df2, all = TRUE)
    semi_join(df1, df2)df1[df1 x x %in% df2 xx, , drop = FALSE]
    anti_join(df1, df2)df1[!df1 x x %in% df2 xx, , drop = FALSE]
    # 假设相同变量,里面得内容不一样,如AAA-BMI-常1
    data2=data.frame(
      names = c('AAA','BBB',  'CCC', 'DDD', 'EEE'          ),
      gender = c(1, 2, 1, 2, 1),    #1=男 2=女
      bmi = c('正常1','低体重','正常','超重','肥胖'          )
    )
    
    merge(data1,data2,all=TRUE,by = intersect(names(data1), names(data2)))
    # 结果会另起一行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    namesbmilogFCgender
    AAA正常3NA
    AAA正常1NA1
    BBB低体重NA2
    CCC正常-0.41
    DDD超重52
    EEE肥胖0.41
    FFF正常-3NA

    多个数据框合并

    data1=data.frame(
      names = c('AAA',       'CCC', 'DDD', 'EEE',  'FFF' ),
      logFC = c(3, -0.4, 5, 0.4, -3 ),
      bmi = c('正常',        '正常','超重','肥胖','正常')
    )
    data2=data.frame(
      names = c('AAA','BBB',  'CCC', 'DDD', 'EEE'          ),
      gender = c(1, 2, 1, 2, 1),    #1=男 2=女
      bmi = c('正常','低体重','正常','超重','肥胖'          )
    )
    
    data3=data.frame(
      names = c('GGG'         ),
      gender = c("男"),    #1=男 2=女
      bmi = c('正常'      )
    )
    
    file=ls(pattern = "data")
    ALL1=list(data1,data2,data3)
    
    multimerge<-function(dat=list(),...){
      if(length(dat)<2)return(as.data.frame(dat))
      mergedat<-dat[[1]]
      dat[[1]]<-NULL
      for(i in dat){
        mergedat<-merge(all=TRUE,mergedat,i,...)
      }
      return(mergedat)
    }
    multimerge(ALL1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    什么是数字孪生?
    CAS:198139-51-4,OG 488 SE,OG 488-NHS,俄勒冈州绿488琥珀酰亚胺酯
    26.在springboot中使用thymeleaf判断语句(if,switch)
    z—libirary最新地址获取,zlibirary地址获取方式,zliabary最新地址,zliabary官网登录方式,zliabary最新登陆
    面向对象——实现类的基本操作
    String 字符串的使用方法 -- JavaScript
    【ModelSim】查看波形图(Wave)和数据流图(DataFlow),以4-bit计数器为例
    计算机视觉(点+折线PR图)
    目标检测中的anchor机制
    openGauss学习笔记-93 openGauss 数据库管理-访问外部数据库-oracle_fdw
  • 原文地址:https://blog.csdn.net/weixin_46623488/article/details/125516702