如何在R键合并

InfoWorld的|2019年12月3日

请参阅如何在R三大不同的方式合并数据:与基础R的合并功能,dplyr的家人加入的功能,而data.table包。

版权所有©2019足球竞彩网下载

你好。我莎朗马克利斯在IDG,这里做一集38多与R:3倍的方式加入数据 - 基础R,tidyverse和data.table。

这里,通过连接数据,我的意思是由一个或多个公共列组合两个数据帧。不只是会附上其他行。

在这个例子中,我将用我最喜欢的数据集之一 - 航班延误时间。如果你想跟着一起,头屏幕上的bit.ly链接(位点LY削减USFlightDelays)和下载数据与列的航班日期,Reporting_Airline,出发地,目的地和DepartureDelayMinutes。也得到了查找表Reporting_Airline。

你可以在我的相关文章InfoWorld的让所有的代码,并链接到下载数据,在屏幕上的URL。

让我们开始吧。首先让我在这两个文件中,基础R读取方式。我先解压航班延误的文件,然后导入与read.csv延迟和代码查找文件。

让我们来看一看两个数据帧。

我想一列添加到航班延误的数据与航空公司的名称。的基础R的方法是使用合并()函数。

对于合并的语法是第一数据帧,第二数据帧。没关系的顺序,但无论哪一个首先被认为是X,第二个为y。如果你想加入的列不具有相同的名称,你需要告诉你想加入哪个列合并:by.x为X数据帧列名,by.y用于y之一。

你也可以告诉合并是否希望所有的行,包括那些不匹配,或者只是行那场比赛。在这种情况下,我想从延迟数据的所有行 - 如果有在查找表中没有航空公司代码,我还是想要的信息。但我并不需要从查找表中没有的延迟数据(有一些代码旧航空公司是不存在了飞)行。所以,all.x等于TRUE,但all.y等于FALSE。让我运行

现在,您可以看到我加盟的数据帧包括一个名为“描述”基于运营商代码航空公司的名称列。而我的新的数据帧具有相同数量的行,我最初的延迟数据帧的,所以我没有错过任何东西。

接下来,让我们看看在tidyverse dplyr连接。Dplyr使用SQL数据库语法其加入的功能。

A“左连接”是指包括左(什么是合并X数据帧())和所有行的一切,从右侧或Y,数据帧匹配。如果连接列具有相同的名称,你需要的是left_join(X,Y)。如果它们不具有相同的名称,你需要通过争论。注意语法有:这是一个矢量:左数据帧列名等于正确的数据帧的列名,在引号两个名字。

现在,让我跑,在R.

我会加载dplyr和readr包,然后在两个文件read_csv阅读。随着read_csv,我并不需要先解压缩文件。

Read_csv创建tibble,这与一些额外的特征的类型的数据帧的。 我会加入两个tibbles与left_join()。看看语法。这一次,顺序很重要。提醒:left_join装置包括相匹配的从第二一个在左边的所有行或第一数据集,而只是行。而且,我需要通过两个不同命名的列的加盟,我通过论证有一个。

该连接的数据集现在有航空公司的名称的新列。你可能注意到,这是方式比基地R.快

现在,让我们看一个超快速的方法来做到这一点,与data.table包。

在这里,我加载data.table,然后使用data.table的FREAD()函数来导入zip文件。

要读取压缩文件,我用的fread的能力来直接调用shell命令。这就是争论的解压缩-cq部分在做什么。的fread()创建一个对象data.table - 具有额外功能性的数据帧。

至少有两种方法可以做到与data.table连接。一种是使用完全相同的合并()的语法基础R.它的工作原理相同,但速度快了很多。

如果你想使用data.table语法,你可以先用setkey的()函数你想加入哪个列集。Then, the syntax is – as you see on the last line of code – your lookup table (or right data frame – the one where you don’t want all the rows, only the matching ones), open bracket, table with the data, close bracket

最后,我将演示一个包谁喜欢dplyr语法,或用于SQL数据库语法的人,但要迅速data.table后端。这可能与新dtplyr 1.0包。

安装并加载包通常的方式。要使用dtplyr,你需要把数据帧或tibbles到特殊懒DataTable对象。你做到这一点与dtplyr的lazy_dt()函数。我这样做,第一组的代码在这里,read_csv的结果通过管道传递给lazy_dt()函数。

现在,我可以加入这两个对象通常dplyr方式。我得到的回复是一个特殊的dtplyr步骤对象 。如果我打印出来,你可以看到创建该对象的data.table代码。这是很方便的!我也看到了数据的前几排,和消息,我需要把该对象到数据帧,tibble,或data.table如果我想在那里使用的数据。

运行一些比较简陋的标杆后,两个data.table方法是最快的;dtplyr几乎一样快;dplyr花了大约两倍的时间;和基值R是较慢的15或20倍。这里主要提醒,性能取决于您的数据集的结构和尺寸,并且可以大相径庭取决于你的任务。但它肯定地说,基础R不是什么,但小数据帧的绝佳选择。

总括来说:,下面的代码得到您想要从其他的一个第一(或左)数据集的所有行,只有匹配的行共同列合并两个数据帧。这是基R或data.table的语法。

这是dplyr语法。这是data.table语法(记住你也可以使用合并())。还有另一种语法data.table并不需要一个单独的setkey()语句。我不使用它,但在这里它是,如果你比较喜欢:在括号内的参数添加。

如果你只想要行,其中有一个匹配?这是一个内部联接。

对于基R或data.table合并()语法是all.x和all.y两者FALSE。随着dplyr,使用INNER_JOIN()。而data.table语法也可以在此除了合并()(我已经离开了setkey的()命令,因为我已经对这个数据集的密钥。)

如果你想看到左(或x)的数据集,其中有不匹配,这是一个ANTI JOIN行。它可以是非常有用的运行左侧后或内部连接,看看有什么不匹配 - 有时你希望没有匹配的,但你不知道其他时间。

我可能会使用来自dplyr或DT括号语法或者anti_join()从data.table这一点。

如果从两个数据集,无论匹配是一个充满希望的所有行加入。对于这一点,我通常用两种合并()与所有等于true或dplyr FULL_JOIN。

最后一个问题,我经常看到:怎么样加入2列?让我经历了如何指定提醒,您可以在InfoWorld的相关文章下载所有的代码,这PowerPoint文件。

对于多个列上合并()中,将创建x的列名的常规载体中,每个在引号;和y列名的常规载体中,也各自在引号中。如果列名是相同的两组数据,你不必指定它们,但我通常喜欢反正,防止意外事情发生。dplyr语法略有不同,而更像SQL一点。它指出哪些列等于其等栏目。在这里,邮编应匹配了拉链,等等。这是从相关文章中的另一个例子。

data.table有几个方面的数据集来设置多个关键点。有setkey的()指不带引号的列名;和setkeyv如果你想在矢量引用的名称。 还有在参数data.table的。所有这些语法只是哦,这么略有不同,彼此,我的建议是挑选的方式,并坚持下去。。。或存储在一个易于访问的地方,这些所有。

再次,你可以在这个屏幕上的URL下载我的PowerPoint幻灯片和代码这部影片。


这是它为这个情节,感谢收看!对于以上R提示,头向做多有R在页面去点InfoWorld的点com削减更多的与R,除了R.全部小写
您还可以找到做多配合YouTube IDG技术讲座槽R播放列表 - 在这里你可以订阅,所以你永远不会错过任何一集。希望下次再见!
流行
从IDG.tv精选视频