Расчет суммы отдельно по группам в R - PullRequest
0 голосов
/ 28 июня 2018

Скажите, у меня есть набор данных.

df=structure(list(ItemRelation = c(13250L, 13250L, 13250L, 13250L, 
13250L, 13250L, 13250L, 13250L, 13250L, 13250L, 13250L, 13250L, 
1300L, 1300L, 1300L, 1300L, 1300L, 1300L, 1300L, 1300L, 1300L, 
1300L, 1300L, 1300L), SaleCount = c(354L, 679L, 397L, 473L, 614L, 
404L, 127L, 434L, 786L, 127L, 434L, 786L, 354L, 679L, 397L, 473L, 
614L, 404L, 127L, 434L, 786L, 127L, 434L, 786L), DocumentNum = c(336L, 
336L, 336L, 336L, 336L, 336L, 336L, 336L, 336L, 336L, 336L, 336L, 
335L, 335L, 335L, 335L, 335L, 335L, 335L, 335L, 335L, 335L, 335L, 
335L), IsPromo = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L)), .Names = c("ItemRelation", 
"SaleCount", "DocumentNum", "IsPromo"), class = "data.frame", row.names = c(NA, 
-24L))

Существует переменная испромо. Требуются только значения 0 и 1. Итак, я должен рассчитать сумму по salecount для каждой группы отдельно, но только для 1 категории испромо. группа это ItemRelation + SaleCount + DocumentNum

Как я могу это сделать?

желаемый вывод

ItemRelation    DocumentNum sum1
13250            336       1347
1300             335       1347

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вот дополнительное решение R с использованием aggregate

aggregate(SaleCount ~ ItemRelation + DocumentNum, subset(df, IsPromo == 1), sum)
#  ItemRelation DocumentNum SaleCount
#1         1300         335      1347
#2        13250         336      1347
0 голосов
/ 28 июня 2018

Использование dplyr:

library(dplyr)

df %>% 
  group_by(ItemRelation, DocumentNum) %>% 
  filter(IsPromo == 1) %>% 
  summarise(sum1 = sum(SaleCount))

# A tibble: 2 x 3
# Groups:   ItemRelation [?]
  ItemRelation DocumentNum  sum1
         <int>       <int> <int>
1         1300         335  1347
2        13250         336  1347
...