{"id":813,"date":"2015-02-27T14:19:23","date_gmt":"2015-02-27T21:19:23","guid":{"rendered":"http:\/\/homepages.uc.edu\/~yaozo\/wordpress\/?p=813"},"modified":"2015-02-27T14:19:23","modified_gmt":"2015-02-27T21:19:23","slug":"pivot-tables-in-r-with-melt-and-cast","status":"publish","type":"post","link":"https:\/\/zhuoyao.net\/index.php\/2015\/02\/27\/pivot-tables-in-r-with-melt-and-cast\/","title":{"rendered":"Pivot Tables in R with melt and cast"},"content":{"rendered":"<header class=\"entry-header\">\n<div class=\"entry-meta\"><span class=\"posted-on\"><i class=\"icon-time\"> <\/i><a href=\"http:\/\/marcoghislanzoni.com\/blog\/2013\/10\/11\/pivot-tables-in-r-with-melt-and-cast\/\" rel=\"bookmark\"><time class=\"entry-date published\" title=\"11 Oct 2013\" datetime=\"2013-10-11T18:15:13+00:00\">about a year ago<\/time><\/a><\/span> <span class=\"byline\"><i class=\"icon-user\"> <\/i><span class=\"author vcard\"><a class=\"url fn n\" href=\"http:\/\/marcoghislanzoni.com\/blog\/author\/admin\/\">Marco Ghislanzoni<\/a><\/span><\/span><\/div>\n<\/header>\n<div class=\"entry-content\">\n<div class=\"featured-image-single\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment-post-thumbnail wp-post-image\" src=\"http:\/\/marcoghislanzoni.com\/blog\/wp-content\/uploads\/2013\/10\/Untitled.png\" alt=\"Untitled\" width=\"279\" height=\"289\" \/><\/div>\n<div id=\"yasr_visitor_votes_528\" class=\"yasr-visitor-votes\">\n<div id=\"yasr_rateit_visitor_votes_528\" class=\"rateit\" data-rateit-starwidth=\"16\" data-rateit-starheight=\"16\" data-rateit-value=\"2.5\" data-rateit-step=\"1\" data-rateit-resetable=\"false\" data-rateit-readonly=\"false\"><\/div>\n<p><span id=\"yasr-total-average-text_528\" class=\"yasr-total-average-text\" title=\"yasr-stats\">[Total: 10 \u00a0 \u00a0Average: 2.5\/5]<\/span><\/div>\n<p>If you are making the transition from Excel to R and still can\u2019t figure out how to quickly obtain pivot tables like Excel has, this article is for you!<\/p>\n<p>Actually it is pretty easy to produce Pivot Tables in R. All you need is a package called\u00a0<em>reshape<\/em> by\u00a0Hadley Wickham (yes, the same prolific author of\u00a0<em>plyr<\/em> and\u00a0<em>ggplot2<\/em>) and some understanding of how\u00a0<em>reshape<\/em>\u00a0\u201cthinks\u201d and works.<\/p>\n<p>If you are interested in an alternative, easier but less powerful, method to create Pivot Tables in R using\u00a0<em>aggregate<\/em>, you can read my <a title=\"Pivot Tables in R with aggregate\" href=\"http:\/\/marcoghislanzoni.com\/blog\/2014\/03\/13\/pivot-tables-r-aggregate\/\">other post here<\/a>.<\/p>\n<p>For this tutorial, we will be using a sample data set called <em>Salespeople PivotTable report<\/em>,\u00a0which is used in many articles by Microsoft teaching the basics of Pivot Tables in Excel. The link to the sample data file can be found at the bottom of this article.<\/p>\n<p>We will first obtain each result in Excel and then reproduce it with R.\u00a0I recommend that you download the sample data file and follow along.<\/p>\n<h3>1. Download the sample data file<\/h3>\n<p>Use the link at the bottom of the article and save the file somewhere on your hard drive. So far so good!<\/p>\n<h3>2. Open the file in Excel and save a CSV copy of the first sheet<\/h3>\n<p>Double-click the file from the location where you saved it to open it inside Excel. The Excel worksheet has 3 tabs. We will be using the first one, containing the source data, and the last one, which contains a ready-made Pivot Table to play with.\u00a0If you do not know how to make Pivot Tables in Excel, I recommend you read the Microsoft tutorial. In this article we will focus on how to obtain the same results with R and we will use the ready-made pivot table on sheet 3.<\/p>\n<p>Once you are on the first sheet of the sample data set (the one with the source data), save a copy of it as CSV (Comma Separated Values) file. This will generate a file which is easier to import into R. R has packages which allow you to read directly Excel files without converting them to CSV, but for the sake of\u00a0simplicity\u00a0we will stick to CSV.<\/p>\n<p>Before saving as CSV, change the format of column E (Order Amount) to General so that the orders amounts appear as numbers with 2 decimals and not with a $ sign in front and comma separated thousands. If you export to CSV without doing this first, there will be extra steps required in R to convert the sales amounts to numeric (see the note at the end of the article).<\/p>\n<h3>3. Load the CSV file in R<\/h3>\n<p>This is an easy step accomplished with the <em>read.CSV<\/em> function as follows.<\/p>\n<div id=\"crayon-54f0dac9cf782476087455\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf782476087455-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf782476087455-1\" class=\"crayon-line\"><span class=\"crayon-v\">data<\/span> <span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-o\">&#8211;<\/span> <span class=\"crayon-v\">read<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">CSV<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;file_name.txt&#8221;<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">header<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-t\">TRUE<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>file_name.txt is the name of the CSV file you created from Excel. If it is not in the current working directory in R, you can either change R\u2019s working directory with <em>setwd<\/em> or move the file to the current working directory or add a path to the file before the file name.<\/p>\n<p>At this point you should have the same base data open in Excel and loaded into R. In R the first lines will look like this:<\/p>\n<div id=\"crayon-54f0dac9cf797758133114\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf797758133114-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf797758133114-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf797758133114-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf797758133114-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf797758133114-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf797758133114-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf797758133114-7\">7<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf797758133114-1\" class=\"crayon-line\"><span class=\"crayon-e\">Country <\/span><span class=\"crayon-e\">Salesperson <\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">Date <\/span><span class=\"crayon-e\">OrderID <\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span><\/div>\n<div id=\"crayon-54f0dac9cf797758133114-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">UK\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Suyama<\/span> <span class=\"crayon-cn\">10<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10249<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">1863.40<\/span><\/div>\n<div id=\"crayon-54f0dac9cf797758133114-3\" class=\"crayon-line\"><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">USA\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Peacock<\/span> <span class=\"crayon-cn\">11<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10252<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">3597.90<\/span><\/div>\n<div id=\"crayon-54f0dac9cf797758133114-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">3<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">USA\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Peacock<\/span> <span class=\"crayon-cn\">12<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10250<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">1552.60<\/span><\/div>\n<div id=\"crayon-54f0dac9cf797758133114-5\" class=\"crayon-line\"><span class=\"crayon-cn\">4<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">UK\u00a0\u00a0 <\/span><span class=\"crayon-i\">Dodsworth<\/span> <span class=\"crayon-cn\">15<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10255<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">2490.50<\/span><\/div>\n<div id=\"crayon-54f0dac9cf797758133114-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">5<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">USA\u00a0\u00a0 <\/span><span class=\"crayon-i\">Leverling<\/span> <span class=\"crayon-cn\">15<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10251<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">654.06<\/span><\/div>\n<div id=\"crayon-54f0dac9cf797758133114-7\" class=\"crayon-line\"><span class=\"crayon-cn\">6<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">UK\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Buchanan<\/span> <span class=\"crayon-cn\">16<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10248<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">440.00<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>4. Your first Pivot Table in R with melt and cast<\/h3>\n<p>Here we go. This is what we have been waiting for, the rest was just preparation to get to this point. Ready?<\/p>\n<p>We will re-produce in R a pivot table like the default one that appears in the 3rd tab of the sample Excel file and which looks like this.<\/p>\n<p><a href=\"http:\/\/marcoghislanzoni.com\/blog\/wp-content\/uploads\/2013\/10\/Capture_1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/marcoghislanzoni.com\/blog\/wp-content\/uploads\/2013\/10\/Capture_1.png\" alt=\"Capture_1\" width=\"214\" height=\"249\" \/><\/a><\/p>\n<p>Basically it shows how much each sales person has sold in total across all orders and and countries\u00a0(note that the Country filter is set to All). It also shows a Grand Total which is the sum of all sales.<\/p>\n<p>To get the job done in R we will use the <em>reshape<\/em> package. There are other packages available which can achieve the same results, but\u00a0<em>reshape<\/em>is particularly versatile and easy to use once you have grasped some basic concepts. (And, hey, it has been written by\u00a0Hadley Wickham, so we _have_ to use it!)<\/p>\n<p>We can install (if not already installed) and load the\u00a0<em>reshape<\/em> package with:<\/p>\n<div id=\"crayon-54f0dac9cf7a1122204017\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7a1122204017-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7a1122204017-2\">2<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7a1122204017-1\" class=\"crayon-line\"><span class=\"crayon-v\">install<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">packages<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;reshape&#8221;<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7a1122204017-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-r\">library<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">reshape<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>If you have\u00a0<em>ggplot2<\/em> installed and loaded,\u00a0<em>reshape<\/em> will already be available.<\/p>\n<p>The\u00a0<em>reshape<\/em>\u00a0package contains two functions that are key to easily generate pivot tables in R. They are\u00a0<em>melt<\/em>\u00a0and\u00a0<em>cast<\/em>.<\/p>\n<p><em>melt<\/em> transforms a data frame from the original format to a so called long format, where all the observed variables (called measures) appear, together with their respective value, in two adjacent columns named <strong>variable<\/strong> and <strong>value<\/strong>. Each row of this new data format is identified by a unique combination of the <strong>id<\/strong> variables, also part of the original data frame.<i><br \/>\n<\/i><\/p>\n<p>An example will clarify how\u00a0<em>melt<\/em> works. Let\u2019s take the first 6 rows of our data set.<\/p>\n<div id=\"crayon-54f0dac9cf7a8414714714\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7a8414714714-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7a8414714714-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7a8414714714-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7a8414714714-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7a8414714714-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7a8414714714-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7a8414714714-7\">7<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7a8414714714-1\" class=\"crayon-line\"><span class=\"crayon-e\">Country <\/span><span class=\"crayon-e\">Salesperson <\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">Date <\/span><span class=\"crayon-e\">OrderID <\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7a8414714714-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">UK\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Suyama<\/span> <span class=\"crayon-cn\">10<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10249<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">1863.40<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7a8414714714-3\" class=\"crayon-line\"><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">USA\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Peacock<\/span> <span class=\"crayon-cn\">11<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10252<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">3597.90<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7a8414714714-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">3<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">USA\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Peacock<\/span> <span class=\"crayon-cn\">12<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10250<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">1552.60<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7a8414714714-5\" class=\"crayon-line\"><span class=\"crayon-cn\">4<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">UK\u00a0\u00a0 <\/span><span class=\"crayon-i\">Dodsworth<\/span> <span class=\"crayon-cn\">15<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10255<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">2490.50<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7a8414714714-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">5<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">USA\u00a0\u00a0 <\/span><span class=\"crayon-i\">Leverling<\/span> <span class=\"crayon-cn\">15<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10251<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">654.06<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7a8414714714-7\" class=\"crayon-line\"><span class=\"crayon-cn\">6<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">UK\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Buchanan<\/span> <span class=\"crayon-cn\">16<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10248<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">440.00<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>It contains 5 columns. The first 4 identify each order by a combination of Country, Salesperson, Order.Date and OrderID. These are all non-numeric and there are no calculations we can do on them except, maybe, counting their frequency. Using\u00a0<em>melt<\/em>\u2018s terminology, Country, Salesperson, Order.Date, OrderID are\u00a0<strong>id<\/strong> variables, while Order.Amount, which is a numeric and which is the one we would like to sum up in our pivot table, is a\u00a0<strong>measure<\/strong>.<\/p>\n<p>When melting your data, you can indicate multiple\u00a0<strong>id<\/strong> variables and also multiple\u00a0<strong>measure<\/strong> variables. The\u00a0<strong>id<\/strong> variable will appear as-is in the resulting melted format, while the\u00a0<strong>measure<\/strong> variable will be stacked in the\u00a0<strong>variable<\/strong> column with their respective value in the\u00a0<strong>value<\/strong> column.<\/p>\n<p>Note that <em>melt<\/em> preserves all data. Nothing is lost or modified, just the way the data are collected within the data frame. It is\u00a0therefore possible to \u201cun-<em>melt\u201d<\/em>\u00a0the melted data and go back to the original format at any time.<\/p>\n<p>Let\u2019s melt our sales data frame and see what the result looks like.<\/p>\n<div id=\"crayon-54f0dac9cf7b1038269116\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7b1038269116-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7b1038269116-1\" class=\"crayon-line\"><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">m<\/span> <span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-o\">&#8211;<\/span> <span class=\"crayon-e\">melt<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">id<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">c<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-cn\">4<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">measure<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">c<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">5<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Pretty simple. Instead of listing the column names we have used their numerical identifiers. We have indicated to\u00a0<em>melt<\/em> that columns 1 to 4 (\u00a0Country, Salesperson, Order.Date, OrderID) are\u00a0<strong>id<\/strong> variables while column 5 (Order.Amount) is a\u00a0<strong>measure<\/strong> variable.<em><br \/>\n<\/em><\/p>\n<p>Here is how the first 6 rows of data.m look like at this point:<\/p>\n<div id=\"crayon-54f0dac9cf7b8767655535\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7b8767655535-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7b8767655535-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7b8767655535-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7b8767655535-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7b8767655535-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7b8767655535-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7b8767655535-7\">7<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7b8767655535-1\" class=\"crayon-line\"><span class=\"crayon-e\">Country <\/span><span class=\"crayon-e\">Salesperson <\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">Date <\/span><span class=\"crayon-e\">OrderID\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">variable\u00a0\u00a0 <\/span><span class=\"crayon-i\">value<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7b8767655535-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">UK\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Suyama<\/span> <span class=\"crayon-cn\">10<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10249<\/span> <span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span> <span class=\"crayon-cn\">1863.40<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7b8767655535-3\" class=\"crayon-line\"><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">USA\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Peacock<\/span> <span class=\"crayon-cn\">11<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10252<\/span> <span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span> <span class=\"crayon-cn\">3597.90<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7b8767655535-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">3<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">USA\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Peacock<\/span> <span class=\"crayon-cn\">12<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10250<\/span> <span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span> <span class=\"crayon-cn\">1552.60<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7b8767655535-5\" class=\"crayon-line\"><span class=\"crayon-cn\">4<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">UK\u00a0\u00a0 <\/span><span class=\"crayon-i\">Dodsworth<\/span> <span class=\"crayon-cn\">15<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10255<\/span> <span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span> <span class=\"crayon-cn\">2490.50<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7b8767655535-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">5<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-e\">USA\u00a0\u00a0 <\/span><span class=\"crayon-i\">Leverling<\/span> <span class=\"crayon-cn\">15<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10251<\/span> <span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-cn\">654.06<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7b8767655535-7\" class=\"crayon-line\"><span class=\"crayon-cn\">6<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-e\">UK\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Buchanan<\/span> <span class=\"crayon-cn\">16<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">07<\/span><span class=\"crayon-o\">\/<\/span><span class=\"crayon-cn\">2003<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">10248<\/span> <span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span><span class=\"crayon-h\">\u00a0\u00a0<\/span><span class=\"crayon-cn\">440.00<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>As said the column Order.Amount has been \u201cmelted\u201d into a variable column with the respective values in the value column.<\/p>\n<p>Now that our data have been melted (and you have to do this only once, unless you change idea on what you want as id and as measure), we are ready to\u00a0<em>cast<\/em> them to build the pivot table.<\/p>\n<p><em>cast<\/em> requires us to indicate, beside a reference to the melted data, how we want to re-aggregate the values.<\/p>\n<p>The basic syntax is (and, yes, we are omitting some parameters that we won\u2019t need in this tutorial):<\/p>\n<div id=\"crayon-54f0dac9cf7bf860851555\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7bf860851555-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7bf860851555-1\" class=\"crayon-line\"><span class=\"crayon-e\">cast<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">formula<\/span> <span class=\"crayon-o\">=<\/span> <span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span> <span class=\"crayon-o\">~<\/span> <span class=\"crayon-v\">variable<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">fun<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">aggregate<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-t\">NULL<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">margins<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-t\">FALSE<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">subset<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-t\">TRUE<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>formula<\/em>\u00a0and<em> fun.aggregate<\/em> are the most important two because they indicate how we want to reshape the data and which functions to use for aggregating the values.<\/p>\n<p>Think of\u00a0<em> formula<\/em>\u00a0as saying:<\/p>\n<div id=\"crayon-54f0dac9cf7c6297782631\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7c6297782631-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7c6297782631-1\" class=\"crayon-line\"><span class=\"crayon-e\">what <\/span><span class=\"crayon-st\">do<\/span> <span class=\"crayon-e\">you <\/span><span class=\"crayon-e\">want <\/span><span class=\"crayon-st\">as<\/span> <span class=\"crayon-v\">rows<\/span> <span class=\"crayon-o\">~<\/span> <span class=\"crayon-e\">what <\/span><span class=\"crayon-st\">do<\/span> <span class=\"crayon-e\">you <\/span><span class=\"crayon-e\">want <\/span><span class=\"crayon-st\">as<\/span> <span class=\"crayon-v\">columns<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>While\u00a0<em>fun.aggregate<\/em> says how you want to aggregate the values of the variable(s) in order to reshape them as described by\u00a0<em>formula<\/em>. This is the equivalent of selecting \u201cCount of\u201d, or \u201cSum of\u201d etc. in Excel.<\/p>\n<p>Going back to our example will make this point clearer.<\/p>\n<p>We want to produce a pivot table which contains the total sales for each sales person. Therefore we chose Salesperson as row and variable (which is Sales.Amount) as column. The aggregate function will be\u00a0<em>sum<\/em> to obtain the sum of the variable (Sales.Amount) for each sales person. Here the command:<i><br \/>\n<\/i><\/p>\n<div id=\"crayon-54f0dac9cf7cd034281943\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7cd034281943-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7cd034281943-1\" class=\"crayon-line\"><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">c<\/span> <span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-o\">&#8211;<\/span> <span class=\"crayon-e\">cast<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">m<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">Salesperson<\/span> <span class=\"crayon-o\">~<\/span> <span class=\"crayon-v\">variable<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">sum<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>And here is the resulting pivot table:<\/p>\n<div id=\"crayon-54f0dac9cf7d3919602847\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7d3919602847-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7d3919602847-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7d3919602847-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7d3919602847-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7d3919602847-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7d3919602847-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7d3919602847-7\">7<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7d3919602847-8\">8<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7d3919602847-9\">9<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7d3919602847-10\">10<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7d3919602847-1\" class=\"crayon-line\"><span class=\"crayon-e\">Salesperson <\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7d3919602847-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Buchanan<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">68792.25<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7d3919602847-3\" class=\"crayon-line\"><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Callahan<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">123032.67<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7d3919602847-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">3<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Davolio<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">182500.09<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7d3919602847-5\" class=\"crayon-line\"><span class=\"crayon-cn\">4<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-i\">Dodsworth<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">75048.04<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7d3919602847-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">5<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Fuller<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">162503.78<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7d3919602847-7\" class=\"crayon-line\"><span class=\"crayon-cn\">6<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">King<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">116962.99<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7d3919602847-8\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">7<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-i\">Leverling<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">201196.27<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7d3919602847-9\" class=\"crayon-line\"><span class=\"crayon-cn\">8<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Peacock<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">225763.68<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7d3919602847-10\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">9<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Suyama<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">72527.63<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>As expected (or not?!?) is identical to the Excel one. Congratulations on your first pivot table in R!<\/p>\n<p>But wait before you pat yourself on the shoulder. In Excel there is an extra row showing the Grand Total and we don\u2019t have it in R. How can we fix it?<\/p>\n<h3>5. Adding Grand Totals<\/h3>\n<p>That\u2019s easy actually. Look back at the syntax for\u00a0<em>cast<\/em>. There is an argument called\u00a0<em>margins<\/em> which comes to rescue.\u00a0<em>margins<\/em> accepts a vector that can contain the strings \u201cgrand_col\u201d and \u201cgrand_row\u201d. This adds an extra column or extra row (or both) with a grand total to the resulting data frame. The grand total is obtained through the same <em>fun.aggregate.<\/em><\/p>\n<p>Let\u2019s add a row with the grand total.<\/p>\n<div id=\"crayon-54f0dac9cf7da070881254\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7da070881254-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7da070881254-1\" class=\"crayon-line\"><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">c<\/span> <span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-o\">&#8211;<\/span> <span class=\"crayon-e\">cast<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">m<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">Salesperson<\/span> <span class=\"crayon-o\">~<\/span> <span class=\"crayon-v\">variable<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">sum<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">margins<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">c<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;grand_row&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>And here it is, identified by (all):<\/p>\n<div id=\"crayon-54f0dac9cf7e0352444012\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7e0352444012-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7e0352444012-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7e0352444012-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7e0352444012-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7e0352444012-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7e0352444012-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7e0352444012-7\">7<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7e0352444012-8\">8<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7e0352444012-9\">9<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7e0352444012-10\">10<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7e0352444012-11\">11<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7e0352444012-1\" class=\"crayon-line\"><span class=\"crayon-e\">Salesperson <\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Buchanan<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">68792.25<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-3\" class=\"crayon-line\"><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Callahan<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">123032.67<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">3<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Davolio<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">182500.09<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-5\" class=\"crayon-line\"><span class=\"crayon-cn\">4<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Dodsworth<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">75048.04<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">5<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Fuller<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">162503.78<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-7\" class=\"crayon-line\"><span class=\"crayon-cn\">6<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">King<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">116962.99<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-8\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">7<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Leverling<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">201196.27<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-9\" class=\"crayon-line\"><span class=\"crayon-cn\">8<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Peacock<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-cn\">225763.68<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-10\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">9<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Suyama<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">72527.63<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7e0352444012-11\" class=\"crayon-line\"><span class=\"crayon-cn\">10<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">all<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-cn\">1228327.40<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Well done!<\/p>\n<h3>6. And how to Filter<\/h3>\n<p>Ok, ok. You are a picky one! I know you noted that our pivot table lacks one more feature respect to the Excel one. It has in fact no ability to Filter by Country. Did you get it yet? No!?!<\/p>\n<p>Yes, the solution is in the other parameter for\u00a0<em>cast<\/em> which we did not consider so far (beside those we omitted):\u00a0<em>subset<\/em>.<\/p>\n<p><em>subset<\/em> allows us to limit the casting to only a subset of the melted data selected according to certain criteria. It requires a vector of TRUE or FALSE corresponding to the rows of the melted data we want to select (TRUE) or exclude (FALSE) before the casting is performed.<\/p>\n<p>Say that we want to calculate the performance only for the American sales people. We need to select only those rows for which Country==\u201dUSA\u201d. This is exactly the additional condition we need to specify within\u00a0<em>cast<\/em> and it corresponds to selecting the Filter Country = USA a the top of the Excel pivot table.<\/p>\n<div id=\"crayon-54f0dac9cf7e8745888636\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7e8745888636-1\">1<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7e8745888636-1\" class=\"crayon-line\"><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">c<\/span> <span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-o\">&#8211;<\/span> <span class=\"crayon-e\">cast<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">m<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">Salesperson<\/span> <span class=\"crayon-o\">~<\/span> <span class=\"crayon-v\">variable<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">sum<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">margins<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-e\">c<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;grand_row&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">subset<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">Country<\/span><span class=\"crayon-o\">==<\/span><span class=\"crayon-s\">&#8220;USA&#8221;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>And here is the filtered pivot. The grand total has also been adjusted accordingly.<\/p>\n<div id=\"crayon-54f0dac9cf7ef022937580\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7ef022937580-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7ef022937580-2\">2<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7ef022937580-3\">3<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7ef022937580-4\">4<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7ef022937580-5\">5<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7ef022937580-6\">6<\/div>\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7ef022937580-7\">7<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7ef022937580-1\" class=\"crayon-line\"><span class=\"crayon-e\">Salesperson <\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-i\">Amount<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7ef022937580-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Callahan<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">123032.7<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7ef022937580-3\" class=\"crayon-line\"><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Davolio<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">182500.1<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7ef022937580-4\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">3<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-i\">Fuller<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">162503.8<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7ef022937580-5\" class=\"crayon-line\"><span class=\"crayon-cn\">4<\/span><span class=\"crayon-h\">\u00a0\u00a0 <\/span><span class=\"crayon-i\">Leverling<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">201196.3<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7ef022937580-6\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-cn\">5<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-i\">Peacock<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">225763.7<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7ef022937580-7\" class=\"crayon-line\"><span class=\"crayon-cn\">6<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">all<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"crayon-cn\">894996.5<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Congratulations, now we are really done! <img decoding=\"async\" class=\"wp-smiley\" src=\"http:\/\/marcoghislanzoni.com\/blog\/wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":-)\" \/><\/p>\n<p>I hope you have enjoyed this tutorial on how to make simple pivot tables in R. Please leave a comment below if you would like to see more tutorials on the same topic.<\/p>\n<p>Till next time!<\/p>\n<p>&nbsp;<\/p>\n<h3>Note: Stripping $ and commas and converting to numeric<\/h3>\n<p>Ok, so you decided not to change the format of Column E (Amount) to General before saving the table as CSV. I had warned you. Now your punishment will be terrible and will include\u2026 regular expressions! Read on.<\/p>\n<p>Once you open the CSV file in R, you can verify that the column Order.Amount has indeed been imported as a Factor. In order to be able to do calculations on it, we need to convert it to numeric first. This can be easily achieved using the function <em>as.numeric<\/em>, however the $ sign at the beginning and the commas separating the\u00a0thousands will cause it to generate unexpected results. Before running through\u00a0<em>as.numeric<\/em>\u00a0we need therefore to strip both the $ sign and the commas. This can be quickly done using\u00a0<em>gsub<\/em> and regular expressions. Teaching you regular expressions goes beyond the scope of this article, but the following code does the job.<\/p>\n<div id=\"crayon-54f0dac9cf7f7511476696\" class=\"crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate\" data-settings=\" minimize scroll-mouseover\">\n<div class=\"crayon-toolbar\" data-settings=\" mouseover overlay hide delay\"><span class=\"crayon-title\">Strip $ and , from Amount<\/span><\/p>\n<div class=\"crayon-tools\">\n<div class=\"crayon-button crayon-nums-button crayon-pressed\" title=\"Toggle Line Numbers\"><\/div>\n<div class=\"crayon-button crayon-plain-button\" title=\"Toggle Plain Code\"><\/div>\n<div class=\"crayon-button crayon-wrap-button\" title=\"Toggle Line Wrap\"><\/div>\n<div class=\"crayon-button crayon-copy-button\" title=\"Copy\"><\/div>\n<div class=\"crayon-button crayon-popup-button\" title=\"Open Code In New Window\"><\/div>\n<p><span class=\"crayon-language\">R<\/span><\/div>\n<\/div>\n<div class=\"crayon-plain-wrap\"><\/div>\n<div class=\"crayon-main\">\n<table class=\"crayon-table\">\n<tbody>\n<tr class=\"crayon-row\">\n<td class=\"crayon-nums \" data-settings=\"show\">\n<div class=\"crayon-nums-content\">\n<div class=\"crayon-num\" data-line=\"crayon-54f0dac9cf7f7511476696-1\">1<\/div>\n<div class=\"crayon-num crayon-striped-num\" data-line=\"crayon-54f0dac9cf7f7511476696-2\">2<\/div>\n<\/div>\n<\/td>\n<td class=\"crayon-code\">\n<div class=\"crayon-pre\">\n<div id=\"crayon-54f0dac9cf7f7511476696-1\" class=\"crayon-line\"><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">Amount<\/span> <span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-o\">&#8211;<\/span> <span class=\"crayon-e\">gsub<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;([\/$,])&#8221;<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-s\">&#8220;&#8221;<\/span><span class=\"crayon-sy\">,<\/span> <span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">Amount<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<div id=\"crayon-54f0dac9cf7f7511476696-2\" class=\"crayon-line crayon-striped-line\"><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">Amount<\/span> <span class=\"crayon-o\">&lt;<\/span><span class=\"crayon-o\">&#8211;<\/span> <span class=\"crayon-st\">as<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">numeric<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">data<\/span><span class=\"crayon-sy\">$<\/span><span class=\"crayon-v\">Order<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">Amount<\/span><span class=\"crayon-sy\">)<\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Obviously the two steps above can be combined into one by nesting\u00a0<em>gsub<\/em> into\u00a0<em>as.numeric<\/em>.<\/p>\n<p>&nbsp;<\/p>\n<h3>Source data:<\/h3>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>about a year ago Marco Ghislanzoni [Total: 10 \u00a0 \u00a0Average: 2.5\/5] If you are making the transition from Excel to R and still can\u2019t figure&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[],"class_list":["post-813","post","type-post","status-publish","format-standard","hentry","category-r"],"_links":{"self":[{"href":"https:\/\/zhuoyao.net\/index.php\/wp-json\/wp\/v2\/posts\/813","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zhuoyao.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zhuoyao.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zhuoyao.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zhuoyao.net\/index.php\/wp-json\/wp\/v2\/comments?post=813"}],"version-history":[{"count":0,"href":"https:\/\/zhuoyao.net\/index.php\/wp-json\/wp\/v2\/posts\/813\/revisions"}],"wp:attachment":[{"href":"https:\/\/zhuoyao.net\/index.php\/wp-json\/wp\/v2\/media?parent=813"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zhuoyao.net\/index.php\/wp-json\/wp\/v2\/categories?post=813"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zhuoyao.net\/index.php\/wp-json\/wp\/v2\/tags?post=813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}