rpivotTable

Enzo Martoglio

2017-04-16

rpivotTable: A pivot table for R

The rpivotTable package is an R htmlwidget built around the pivottable library.

PivotTable.js is a Javascript Pivot Table visualization library with drag’n’drop functionality built on top of jQuery / jQueryUI and written in CoffeeScript (then compiled to JavaScript) by Nicolas Kruchten at Datacratic. It is available under a MIT license

Many thanks to everyone that contributes bugs and prs, and of course thanks to Nicolas Krutchen for pivottable.

Installation

The rpivotTable package depends on htmlwidgets package, so you need to install both packages. You can do this using the devtools package as follows:

# devtools::install_github(c("ramnathv/htmlwidgets", "smartinsightsfromdata/rpivotTable"))

Usage

Call the package with

library(rpivotTable)  # No need to explicitly load htmlwidgets: this is done automatically

Just plug in your data.frame, table or data.table to rpivotTable().

It is as simple as this:

data(mtcars)
rpivotTable(mtcars,rows="gear", cols=c("cyl","carb"),width="100%", height="400px")

The pivot table should appear in your RStudio Viewer or your browser of choice.

For additional technical information please refer to the examples and explanations here.

rpivotTable parameters decide how the pivot table will look like the firs time it is opened:

For example, to display a table with frequency of colour combinations of eyes and hair, you can specify:

library(rpivotTable)
data(HairEyeColor)
rpivotTable(data = HairEyeColor, rows = "Hair",cols="Eye", vals = "Freq", aggregatorName = "Sum", rendererName = "Table", width="100%", height="400px")

This will display the resulting table. Switching the aggregatorName to Sum as Fraction of Rows will give the row percentages (and the column totals will give the percentages over the gran total).

To display the Hair values in reverse order:

library(rpivotTable)
data(HairEyeColor)
rpivotTable(data = HairEyeColor, rows = "Hair",cols="Eye", vals = "Freq", aggregatorName = "Sum", rendererName = "Table", sorters = "
function(attr) { 
var sortAs = $.pivotUtilities.sortAs;
if (attr == \"Hair\") { return sortAs([\"Red\", \"Brown\", \"Blond\", \"Black\"]); }
}", width="100%", height="400px")

This function could be useful for example to sort time divisions like months of the year or days of the week in their proper, non alphabetical order (thanks to palatinuse for its implementation).

Or if you want to include it as part of your dplyr / magrittr pipeline, you can do that also.

# suppressMessages(
  library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
  # )
iris %>%
tbl_df %>%
filter( Sepal.Width > 3 & Sepal.Length > 5 ) %>%
rpivotTable(rows="Sepal.Width",  rendererName="Treemap")
## Warning in filter_impl(.data, dots): '.Random.seed' is not an integer
## vector but of type 'NULL', so ignored