Сумма крена метрики для разных групп в R - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть данные о месячных продажах для разных городов, и я хотел бы свернуть их на основе суммы за 3 месяца.

Month, City, Sales
Jan, Paris, 1000
Jan, NY , 2000
feb, Paris , 1200
Feb, NY, 3000
Mar, Paris, 1000
Mar, NY, 2000
April, Paris, 1400
April, NY, 1000
May, Paris, 2000
May, NY, 1000

Теперь я хотел бы, чтобы сумма последних 3 месяцев выводилась для каждого месяца и города, как показано ниже.

Month, City, Sales,  R3Month
Jan, Paris, 1000 , 1000
Jan, NY , 2000 , 2000
feb, Paris , 1300 , 2300
Feb, NY, 3000 , 5000
Mar, Paris, 1000 , 3300
Mar, NY, 2000 , 7000
April, Paris, 1400, 3700
April, NY, 1000 , 6000
May, Paris, 2000, 4400
May, NY, 1000 , 4000

Любые выводы будут высоко оценены.

Спасибо

1 Ответ

0 голосов
/ 26 апреля 2018

Используйте ave для группировки по городу и rollapplyr для выполнения фактической скользящей суммы. partial=TRUE заставляет его использовать частичные суммы за первые два месяца каждого города.

library(zoo)

roll <- function(x) rollapplyr(x, 3, sum, partial = TRUE)
transform(DF, R3Month = ave(Sales, City, FUN = roll))

дает:

   Month  City Sales R3Month
1    Jan Paris  1000    1000
2    Jan    NY  2000    2000
3    feb Paris  1300    2300
4    Feb    NY  3000    5000
5    Mar Paris  1000    3300
6    Mar    NY  2000    7000
7  April Paris  1400    3700
8  April    NY  1000    6000
9    May Paris  2000    4400
10   May    NY  1000    4000

Примечание

Ввод в воспроизводимом виде:

Lines <- "
Month, City, Sales
Jan, Paris, 1000
Jan, NY , 2000
feb, Paris , 1300
Feb, NY, 3000
Mar, Paris, 1000
Mar, NY, 2000
April, Paris, 1400
April, NY, 1000
May, Paris, 2000
May, NY, 1000"
DF <- read.csv(text = Lines, as.is = TRUE, strip.white = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...