我目前正在尝试将每周数据汇总为每月数据,如下所示:

UPS         WEEK    AP
1111112016  1       385.22
1111112016  2       221.63
1111112016  3       317.47

有 132 个不同的 UPC,周数由 1 - 52 表示。但是,它们因不同的 UPC 而异。我总共有 4,027 行。
我想在 4 周的时间间隔内汇总,直到达到下一个 UPC 类别。我试过这个代码:
z = aggregate(x$AP, by=list(x$UPC, cut(x$WEEK, breaks=13, lables = T)), FUN = sum)
colnames(z) = c("UPC", "Month", "AP")
z = z[order(z$UPC),]

我得到以下输出:
    UPC        Month         AP
1   1111112016 (0.951,4.77]  1098.03
88  1111112016 (4.77,8.54]   1180.03
187 1111112016 (8.54,12.3]   491.18
303 1111112016 (12.3,16.1]   896.31

这里有几个问题:
1) 月份值错误。我想要一个数值。 (1 - 12)
2) 前两个合计是正确的,但之后的总和似乎有时正确有时不正确。

以下是我的数据外观的简短示例:
dput(head(x))
structure(list(UPC = c(1111112016, 1111112016, 1111112016, 1111112016,
1111112016, 1111112016), WEEK = c(1, 2, 3, 4, 5, 6), AP = c(385.22,
221.63, 317.47, 173.71, 269.55, 311.48)), .Names = c("UPC", "WEEK",
"AP"), row.names = c(NA, 6L), class = "data.frame")

最佳答案

像这样的工作(其中数据是您的数据框):

require(data.table)                                                                                                                                                   "AP"), row.names = c(NA, 6L), class = "data.frame")
setDT(data)
result <- data[, .(AP=sum(AP, na.rm = T)), by = .(UPC, MONTH = (floor(WEEK/ 4.34) + 1))]
result <- result[order(UPC)]

结果将是:
        UPC   MONTH    AP
1: 1111112016     1 1098.03
2: 1111112016     2  581.03

关于r - 在恒定的日历周间隔内求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40258212/

10-12 23:34