嗨。我是IDG通信公司的Sharon Machlis,这里是Do More with R:把火花线添加到你的桌子上。
通常,表中需要的只是文本和数字形式的数据。但有时,您也想将每行的结果可视化。当每一行数据都是一段时间内的趋势时,这一点尤其正确。
您可以在表的新列中使用称为火花线的迷你内联图来完成此操作。你可能在Excel中熟悉它们。我们也可以在交互式R表中做。
让我们开始吧。
在上一集中,我演示了使用DT包创建基本HTML表是多么容易。这是代码。
我加载了一些软件包,并阅读了关于5个城市房价的电子表格数据。然后,我使用DT的datatable()函数创建了一个表。最后,我添加了一些格式。
如果我想在这个表中添加一个sparkline列,有四个步骤:
1.在数据框架中添加具有sparkline数据和格式的列。
2.向表选项添加JavaScript片段。这些代码一直都是一样的,所以您可以保存一次并重用它。
3.这个方法非常简单:添加escape = FALSE作为datatable()参数,这样HTML就会显示为HTML,而不是实际代码。
4.这也非常简单:将结果通过管道传输到一个函数,该函数添加了必要的依赖项,这样表就会显示sparkline。
让我们一步一步来看。
首先,我需要在dataframe中添加一列sparkline信息。下面是这样做的格式:
你用s.p。k凸显刘昀。r的函数。这需要两个必需的参数:要可视化的数值向量和您想要的图形类型。Dataviz选项包括用于折线图的line、用于柱状图的bar、用于盒状图的box以及其他一些选项。不幸的是,这并没有在sparkline包帮助文件中实际记录。但是,如果查看JQuery sparkline库的文档,可以看到可用的类型。https://omnipotent.net/jquery.sparkline/#s-docs
我喜欢在sparkline中使用两个可选参数:设置Y轴的最小值和最大值。
那么我们如何得到每一行在火花线中使用的值向量呢?我可以写一个for循环,但如果数据是“整齐的”,这实际上更容易做。也就是说,如果我每一行只有一个观测值,而不是像现在这样:每一行有多个观测值。我可以使用tidyr包及其gather()函数创建该数据的整洁版本。
我将创建一个整洁版本的价格数据框架,首先删除带有select - Change的百分比变化列。我不希望变化百分比出现在我画的趋势中!接下来,我将新的类别列命名为Quarter,新的value列命名为Price,并“收集”1996年第一季度到2018年第一季度的每一列。现在的情况是这样的:
每一行都需要观察一下:都市圈、季度和价格。
下一个代码块使用sparkline info创建一个数据帧。它将有一个MetroArea栏和一个名为TrendSparkline的新栏。如果您查看代码,我首先按MetroArea分组,然后创建sparkline列。
有必要确保您了解在创建sparkline列时所发生的情况。在按都市地区分组后,我正在创建一个新的TrendSparkline柱与s.p。k凸显刘昀。r的函数。这里的第一个参数是每个组的值向量——它是从整齐数据的Price列自动创建的,因为我已经按MetroArea分组了。我将图形类型设置为折线图。这里,我希望Y轴的最小值是100,因为这是1995年价格指数的起点。我将y轴最大值设为价格数据的最大值。
这是这个新的数据框架的样子
可以看到TrendSparkline列中有一组HTML。下面是其中一个值的样子
我可以使用dplyr left_join将该数据框架中的数据添加回原始的prices数据框架。
现在看看数据框架是什么样的。
最难的部分已经完成了。现在我只需要按照步骤2,3,4。
从f.n开始的代码。第二个单引号和右括号的DrawCallback是您需要添加到datatable代码的options列表参数中的内容。我将在本文中通过https://go.infoworld.com/Rsparklines提供该代码片段。
如果你现在看一下桌子
可以看到HTML代码显示为代码本身,而不是执行的代码。
我们可以通过第3步来解决这个问题,在datatable()代码中添加escape = FALSE。默认值是escape = TRUE,这意味着HTML代码将被转义,而不是执行。
如果我用转义代码运行表并在RStudio中查看
在火星柱里什么都没有。这是因为我们需要第4步,它添加必要的依赖项来显示火花线。
看到第11行了吗,s.p.k,下划线,add deps?就是这样。现在如果我们运行代码
你会看到我们的火花线。您甚至可以将鼠标移到图形上查看实际的数据点!
我们有一个简单的方法来了解每个城市的趋势,只要浏览这个专栏。
这就是本期节目的全部内容,感谢收看。如果您想了解更多关于tidyr和gather()函数的信息,请访问https://go.infoworld.com/morewithR,查看第12集,用tidyr重新塑造数据。你也可以在YouTube上找到Do more with R系列。希望下一集见!