我目前正在尝试将每周数据汇总到月度数据,如下所示:
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")
答案 0 :(得分:2)
这样的工作(数据是你的数据帧):
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