2016-10-26 2 views
3

Я в настоящее время пытается объединить еженедельные данные ежемесячных данных, который выглядит следующим образом:Суммируя постоянной календарной недели интервал

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

Есть 132 различных УКТ и недели указаны на 1 - 52. Тем не менее, они различаются в разных СКП. Всего у меня 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") 
+1

Просьба показать небольшой воспроизводимый пример и ожидаемый результат – akrun

ответ

2

Would что-то вроде этой работы (где данные вашей dataframe):

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 
+0

Он выглядит лучше. Но проблема с частью вычисления. Например, 1 месяц - 924,43, но он должен быть около 1098 –

+0

. Он выглядит лучше, почти идеально. Однако, похоже, проблема связана с характером календарей. 52/4 = 13. Это не связано с этими вопросами, но знаете ли вы, как добраться до 12? –

+0

Если мы увидим это в год. 4Q каждый делится на 3m означает 17.33 недели. Если мы разделим это на 3 месяца, мы получим 5,77 недели. Не знаете, как это сделать. –

Смежные вопросы