【问题标题】:Sum fixed number of cells of one column in data.table对 data.table 中一列的固定单元格数求和
【发布时间】:2018-02-22 21:45:08
【问题描述】:

我有一个数据表:

> Data_train[order(Date)]
         Store DayOfWeek       Date Sales Customers Open Promo StateHoliday SchoolHoliday
      1:     1         2 2013-01-01     0         0    0     0            a             1
      2:     2         2 2013-01-01     0         0    0     0            a             1
      3:     3         2 2013-01-01     0         0    0     0            a             1
      4:     4         2 2013-01-01     0         0    0     0            a             1
      5:     5         2 2013-01-01     0         0    0     0            a             1
     ---                                                                                 
1017205:  1111         5 2015-07-31  5723       422    1     1            0             1
1017206:  1112         5 2015-07-31  9626       767    1     1            0             1
1017207:  1113         5 2015-07-31  7289       720    1     1            0             1
1017208:  1114         5 2015-07-31 27508      3745    1     1            0             1
1017209:  1115         5 2015-07-31  8680       538    1     1            0             1

我需要创建一个新变量,其中包含每 42 天

sales 总和
> Data_train[,Sales_6_weeks:=sum(Sales),by=42]

但它给了我一个错误:

[.data.table(Data_train, , :=(Sales_6_weeks, sum(Sales)) 中的错误, : 'by' 或 'keyby' 列表中的项目是长度 (1)。每个必须 长度与 x 中的行数或 i (1017209) 返回的行数相同。

请问我该怎么办? 提前谢谢你

【问题讨论】:

  • 你可以输入你的数据样本吗?
  • 您实际上是在尝试按单个值 c(42) 进行分组 - 它试图通过长度为 1 的分组向量对 1017209 行进行分组。错误正是告诉你这一点。您需要以某种方式制作一个计数器,将您的行分成 42 天的块。以cut - cut(Sys.Date()+0:9, breaks="2 days") 为例。

标签: r


【解决方案1】:

要回答您提出的问题,您可以这样做

Data_train[, Sales_6_weeks := sum(Sales), by = as.numeric(Date - min(Date)) %/% 42]

但看起来你可能想要这样做

Data_train[, Sales_6_weeks := sum(Sales), by = lubridate::week(Date) %/% 6]

【讨论】:

  • 谢谢,但它给了我一个错误日期错误 - min(Date) : non-numeric argument to binary operator
  • 我进行了编辑以添加as.numeric。当您尝试时,您是否使用了我的答案的更新版本?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多