提示:用tidyr重塑数据

信息世界|2018年10月3日

看看tidyr包的收集和传播功能是如何工作的。另外,还可以查看ggplot2中的标记

版权©2018足球竞彩网下载

大家好,我是Sharon Machlis, IDG Communications编辑数据与分析总监。我现在正在看《Do More with R:用整理包重塑数据》的第12集。
这是墨菲的数据定律:您所需的数据并不总是如您所需的格式。并非所有问题都与数据中的错误或差距有关。有时你已经拥有广泛的数据需要漫长;或需要宽的长期数据。
让我们在一个例子上工作。我将在5 U.S. Metro地区的房价电子表格中阅读:波士顿,底特律,费城,旧金山和圣何塞(我叫硅谷)。更具体地说,关于房价的数据每2年,当所有城市始于1995年的100个索引时。此数据从2000年到2018年运行。
以下是电子表格:
当我使用RIO包导入时,这就是它的样子。
这是一种非常的人性化格式。它有时被称为“宽”格式。每个地铁区域都有自己的专栏,您可以扫描每列,并查看该地铁区域的移动。
但是如果您想用ggplot2来绘制数据,您需要以所谓的整齐或“长”格式来显示数据。每行一个观察结果,列名中没有数据。因此,您可以很容易地根据城市区分ggplot2的颜色。现在,城市信息在COLUMN NAMES中,而不是数据本身。
另一个例子:如果我想计算每年哪个城市的索引值最高,那么计算每一行中哪个数字最高是非常容易的。但是如果您想要显示哪个都市区域拥有最高的索引值,就必须从列名中提取信息。
以下是这个数据的一个简洁版本。
每排一个观察:本季度,房价指标价值和地铁地区。对于一个人扫描并不容易,但更好地用于在R中分析 - 特别是在潮汐封装中。
如果数据的唯一版本是宽版本
你怎么得到长的版本?一种方法是使用tidyr包的“收集”功能。
Gather()至少接受3个参数:第一个是数据帧的名称,第二个是新类别列所需的名称——称为key。第三个是你想要的新值列的名称,叫做值。然后是您想要“收集”到新键和值列中的任何列。如果不提供任何列名,则收集所有列。在本例中,我们希望收集所有city列,但不希望收集Quarter列。我可以用- 1 / 4来排除它。
如果我跑了那个
你会看到我得到了一个长而整洁的数据版本。这是收集,我的数据框架,新类别列的名称,新值列的名称,然后列出我想收集的列或者用减号排除不收集的列。
这个版本更容易用ggplot2绘制图形。
第一个代码组是具有此数据的默认GGPLOT线条图表。只需添加Group = Metroarea,我的图表将每个地铁区域绘制为自己的系列或线条。Color = Metroarea为每条线提供不同的颜色。
第二个代码组为情节添加了更多定制:
我选择了一个不同的主题,然后通过删除所有的背景网格和y轴标签,添加标题和副标题,并将标题和副标题放在中心进行调整。在回到重塑之前,我想向您展示一个很酷的包,它与ggplot2一起工作,名为directlabels。
我使用的是刚才创建的相同的定制图,但是将其存储在名为my_customized_plot的变量中。然后我将在它上运行direct-dot-label函数,最后一个参数。点和一个轻微的水平理由的文本。看看会发生什么。
我对每一行都有一个很好的标签,而不是图例!我喜欢把它作为某些情节的选择。
回到重塑。
让我们说我们开始如此整洁的数据,但希望使其“宽”创建一个更容易阅读的表。从长期数据框架到来,我们现在拥有的第一个版本,我们在自己的专栏中使用每个地铁区域看到。为此,您需要分布()的收集()相反()。
Spread()也将数据、键和值作为参数。在本例中,数据就是整洁的数据帧。键是现有列的名称,您希望在其中将每个值转换为各自的列。对于这些数据,是MetroArea。我们有一列是都市区,我们希望每个都市区都在自己的一列中。Value是保存应扩展到新列中的值的现有列的名称。除非我们告诉R,否则R可能不确定它应该是索引栏还是季度栏。
让我们运行它。
现在我们回到了广泛的数据。
这一集就到这里,感谢收看!更多关于R的技巧,请访问go.infoworld.com/morewithR的更多关于R的视频页面。就是https go . infoworld . com / more with R,除了R以外都是小写。或者,你可以将“Do more with R”播放列表添加到你的YouTube库中。再见,希望下期再见!
受欢迎的
来自idg.tv的特色视频