R语言的merge函数

附带python题目http://www.runoob.com/python/python-100-examples.html

R数据框操作:http://www.cnblogs.com/li-20151130/p/9028634.html

R中的merge函数类似于Excel中的Vlookup,可以实现对两个数据表进行匹配和拼接的功能。与Excel不同之处在于merge函数有4种匹配拼接模式,分别为inner,left,right和outer模式。 其中inner为默认的匹配模式,可与sql语言中的join语句用法。

merge 连接两个数据,官方参考文档语法

merge(x, y, by = intersect(names(x), names(y)),
      by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
      sort = TRUE, suffixes = c(".x",".y"),
      incomparables = NULL, ...)
  • merge函数参数的说明:
  • x,y 要合并的两个数据集
  • by,用于连接两个数据集的列,intersect(a,b)值向量a,b的交集,names(x)指提取数据集x的列名 
    by = intersect(names(x), names(y)) 是获取数据集x,y的列名后,提取其公共列名,作为两个数据集的连接列, 当有多个公共列时,需用下标指出公共列,如names(x)[1],指定x数据集的第1列作为公共列 
    也可以直接写为 by = ‘公共列名’ ,前提是两个数据集中都有该列名,并且大小写完全一致,R语言区分大小写
  • by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列
  • all,all.x,all.y:指定x和y的行是否应该全在输出文件
  • sort:by指定的列(即公共列)是否要排序
  • suffixes:指定除by外相同列名的后缀
  • incomparables:指定by中哪些单元不进行合并

举例说明如下

1、创建数据

# 连接列置于第1列; 有多个公共列,在公共列后加上x,y表示数据来源,.x表示来源于数据集w,.y表示来源于数据集q 
# 数据集中w中的 name = ‘D’ 不显示,数据集中q中的 name = ‘F’ 不显示,只显示公有的name行,并且用q数据集A行匹配了w数据集所有的A行

6、outer 模式,将两张表的数据汇总,表中原来没有的数据置为空

merge(w, q, all=TRUE, sort=TRUE) 
  • 1

这里写图片描述

# all = TRUE 表示选取w, q 数据集的所有行,sort = TRUE,表示按 by 列进行排序,默认升序

7、left 匹配模式

merge(w ,q ,all.x=TRUE,sort=TRUE)  # 建议使用 指定了连接列 的情况
# 多个公共列,未指定连接列
# 左连接,设置 all.x = TRUE,结果只显示数据w的列及w在q数据集中没有的列
  • 1
  • 2
  • 3

这里写图片描述

merge(w, q, by = 'name',all.x = TRUE, sort = TRUE)   # 指定连接列
# 多个公共列,指定连接列
# 左连接,设置 all.x = TRUE,结果只显示w所有name值
  •  

这里写图片描述

8、right 匹配模式

merge(w ,q ,by = 'name', all.y=TRUE,sort=TRUE) 
# 多个公共列,指定连接列
# 左连接,设置 all.y = TRUE,结果只显示q所有name值的记录
  •  

这里写图片描述

https://blog.csdn.net/u010652755/article/details/72982227

9、实例应用

library(readxl) 
library(xlsx)   

cdir = setwd('D:\\R')
A = read_excel('A.xlsx',  1)
B = read_excel('B.xlsx',  1)

dt = merge(A ,B ,all=TRUE, sort=TRUE, by = 'stuID')
dt2 = subset(dt, dt$math == 'A',select=names(dt))

# 在D:\\R 目录下创建sample.csv文件
cname = "D:\\R\\sample.csv"  

# 将匹配后的数据写入到 sample.csv 文件中
write.csv(dt2, cname ,sep=",")  

猜你喜欢

转载自blog.csdn.net/OYY_90/article/details/82431085