R中使用merge()函数合并数据

Python016

R中使用merge()函数合并数据,第1张

R语言的merge函数可以实现类似SQL的有点类似 left join right join 或者类似union的效果。

执行merge函数时,函数自动会找到两个数据框df1和df2共有的列,即id那一列(即相当于by= "id"),当参数all= FALSE时,会将两个数据框中该列数值相等的那些行输出来,类似于对这两个数据框的id这一列求交集(intersection)。此例中是id为2或7这两行。此外,还可以发现df1和df2的输入顺序不会影响最终结果,仅仅会影响输出结果中heights和weights这两列的顺序。

更详细可以参考 http://rstudio-pubs-static.s3.amazonaws.com/13602_96265a9b3bac4cb1b214340770aa18a1.html

by参数的使用

上面的示例中by参数只有一个值,如果有两个数值(即长度为2的向量),也就是两个数据框中有共同的两列。

为两个数据框分别添加一列后,这样它们就有了共同的两列。当运行merge函数后发现,函数会自动找到共同的列,然后找到id和sex这两列中共有的数值。此外,如果只设定by= "id"的话,则两数据框中共有的sex那一列则会以sex.x和sex.y形式输出。

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, ...)

x,y:用于合并的两个数据框

by,by.x,by.y:用于连接两个数据集的列,intersect(a,b)值向量a,b的交集,names(x)指提取数据集x的列名 by = intersect(names(x), names(y)) 是获取数据集x,y的列名后,提取其公共列名,作为两个数据集的连接列, 当有多个公共列时,需用下标指出公共列,如names(x)[1],指定x数据集的第1列作为公共列 也可以直接写为 by = ‘公共列名’ ,前提是两个数据集中都有该列名,并且大小写完全一致,R语言区分大小写

all,all.x,all.y:指定x和y的行是否应该全在输出文件.

sort:by指定的列是否要排序.

suffixes:指定除by外相同列名的后缀.

incomparables:指定by中哪些单元不进行合并.

merge函数有4种匹配拼接模式,分别为inner,left,right和outer模式。 其中inner为默认的匹配模式。all=T代表全连接,all.x=T代表左联结;all.y=T代表右连接

inner 模式匹配,只显示两个数据集公共列中均有的行

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

left 匹配模式

right 匹配模式

merge函数参数的说明:

x,y:用于合并的两个数据框

by,by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列.

all,all.x,all.y:指定x和y的行是否应该全在输出文件.

sort:by指定的列是否要排序.

suffixes:指定除by外相同列名的后缀.

incomparables:指定by中哪些单元不进行合并.