在data.table

时间:2018-02-22 21:45:09

标签: r

我有一个数据表:

> 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天<{1}}的总和

sales

但它给了我一个错误:

  

> Data_train[,Sales_6_weeks:=sum(Sales),by=42] 中的错误(Data_train ,, [.data.table(Sales_6_weeks,sum(Sales)),   :&#39; by&#39;中的项目。或者&#39; keyby&#39;列表是长度(1)。每个人都必须   与x中的行或i返回的行数(1017209)的长度相同。

我该怎么办? 提前谢谢

1 个答案:

答案 0 :(得分: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]