【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)))
namesbmilogFCgender
AAA正常31
BBB低体重NA2
CCC正常-0.41
DDD超重52
EEE肥胖0.41
FFF正常-3NA

dplyr::full_join函数情况

dplyr::full_join(data1,data2)

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
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)))
# 结果会另起一行
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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言中,可以使用merge()函数合并两个数据框。merge()函数的基本语法是merge(x, y, by = "共同列名"),其中x和y是要合并两个数据框,by是指定用于合并的共同列名。 例如,如果有两个数据框d1和d2,可以使用merge(d1, d2)来合并它们。合并后的结果将包含两个数据框中的所有列,并且根据共同列名进行匹配。如果两个数据框中有相同的列名,merge()函数会自动识别并进行合并。 另外,merge()函数还可以使用by.x和by.y参数来指定两个数据框中具有相同信息但名称不同的变量。例如,可以使用merge(d1, d3, by.x = "kids", by.y = "pals")来合并d1和d3两个数据框,其中d1的"kids"列与d3的"pals"列含有相同的信息。 总结起来,R语言合并两个数据框的方法有以下几种: 1. 使用merge()函数,通过指定共同列名进行合并。 2. 使用cbind()函数,将两个数据框按列进行横向追加。 3. 使用rbind()函数,将两个数据框按行进行纵向追加。 希望对你有帮助! #### 引用[.reference_title] - *1* *3* [合并数据框](https://blog.csdn.net/sinat_40586658/article/details/120395863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [R语言中的数据合并](https://blog.csdn.net/q383700092/article/details/51182372)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值