【问题标题】:Grouping by columns and rows in data.table in r按r中data.table中的列和行分组
【发布时间】:2016-12-16 05:51:19
【问题描述】:

我对 r 很陌生,所以如果这是基本的(我确信是),我很抱歉,但我无法在任何地方找到答案。

我有一个数据集显示单个产品的销售情况,其中包含大约 500,000 行和 30 列,包括地区、销售金额和日期。我正在使用基本的 data.table 功能来创建基于单个组的摘要,例如按日期销售和按地区销售(即 DT[,sum(Sales),by=Date]),如下所示:

Date    Sales
12/1    50,000
12/2    70,000
12/3    40,000

Region  Sales
North   67000
East    60000
South   15000
West    22000

我想做的是查看(例如)按地区和日期细分的销售额,例如:

        12/1    12/2    12/3
North   10,000  15,000  12,000
East    5,000   25,000  30,000
South   2,000   3,000   10,000
West    6,000   7,000   9,000

我希望能够对文件中包含的所有日期执行此操作(因此我不需要在每次针对不同的数据集和日期运行此操作时手动更改它)。这可能与 data.table 或其他东西吗?

谢谢!

【问题讨论】:

  • @akrun 这正是我想要的,谢谢!还有一个问题 - 有没有办法在 value.var 字段中包含条件?假设我想按地区和日期计算新客户的销售数量 - 在我的第一个示例中,将是 DT[,sum(NewCustomer=="YES"),by=Date]),按日期查看。可以将该条件合并到 dcast 语句中吗?
  • 你可以试试dcast(DT[NewCustomer == "YES"], Region~Date, length)

标签: r data.table


【解决方案1】:

对于大型数据集,data.table 中的 dcast 应该是有效的。

dcast(DT, Region~Date, value.var="Sales", sum)

注意:在这里,我们假设“销售”为 numeric 类。从示例中显示的数据来看,数字之间存在,。所以,它可能是非数字的。如果它不是数字,则在删除,后转换为numeric

DT[, Sales := as.numeric(gsub(",", "", Sales))]

然后执行dcast

【讨论】:

    猜你喜欢
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2020-09-01
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多