首页 > 解决方案 > 如何计算 R 中的列总和,然后使用 data.table 库绘制它

问题描述

因此,我的第一份工作是数据分析师,但是我的老板希望我使用该data.table软件包,但我遇到了一些问题。

我的数据集是关于总购买和退货(客户退货)的电子商务商店。我想在条形图中可视化每个产品返回了多少项目,表示为Product name(我知道列名中有空格有点奇怪,我稍后会更改它)所以我的代码如下:

library(shiny)
library(ggplot2)
library(data.table)
library(tidyverse)

mainTable <- fread('returnStats.csv')  

essentialReturnData <- mainTable[,c(7,9)]

returnsByProductName <- essentialReturnData[, 
                                            .(totalReturns = sum(essentialReturnData$`Return quantity`)), 
                                            by = 'Product name']

barplot(table(returnsByProductName$`Product name`)) 

但是,对于下图中显示的所有 s,我只得到一个具有相同总和值的 data.table Product name

在此处输入图像描述

然后当然我有一个看起来像完全垃​​圾的条形图:

在此处输入图像描述

标签: rdata.tabledata-manipulation

解决方案


这里有两点不对:

  1. 由于您要求sum(essentialReturnData$`Return quantity`),这是对表的不同实例的调用,因此总和忽略了by分组。改为使用sum(`Return grouping`),因为 this 指的是同一表实例中的列。

  2. table(returnsByProductName$`Product name`)是产品名称的频率表,但returnsByProductName每个名称只有一行。你根本没有使用totalReturns!改为使用barplot(returnsByProductName$totalReturns, names.arg = returnsByProductName$`Product name`)

鉴于您拥有多少产品,您将无法以一种很好的方式将所有名称拟合到轴上。您可以执行诸如添加las = 2参数之类的操作,该参数被传递给par()并使 x 轴标签垂直。然而,这么多产品看起来仍然很乱,如果名称很长,那么它不会为情节本身留下太多空间,除非你让情节变得巨大。


推荐阅读