подсчет суммы по нескольким переменным - PullRequest
0 голосов
/ 09 ноября 2018

Я чувствую, что это должно быть очень легко, но я не могу заставить его работать.

Данные - это три столбца, четвертый столбец - это то, что я ищу, и не могу отрисовать:

eg_data <- data.frame(
id = c(1,1,1,2,2,3,3,3,3,3,3,4,4,5,5,5,5),
date = c("11/1", "11/1", "11/2", "11/1", "11/5", "11/5", "11/4", "11/1", 
"11/1", "11/2", "11/4", "11/3", "11/3", "11/2", "11/3", "11/2", "11/1"),
sales = c(2,5,4,1,2,1,4,5,3,8,1,2,4,1,1,3,2),
sum_id_day = c(7,7,4,1,2,1,5,8,8,8,5,6,6,4,1,4,2))

В этом примере для каждой комбинации ID / день мне нужно увидеть общий объем продаж. Таким образом, для ID 1 на дату 11/1 было в общей сложности 7 продаж. Мне не нужна накопленная сумма за строкой, мне нужна общая сумма для каждой комбинации.

Я пробовал составлять и вариации ave / count, но я продолжаю сталкиваться с проблемами, когда уровни факторов не одинаковы, замена имеет X строк, данные имеют X + Y строк, аргументы должны иметь одинаковую длину и т. Д. Я пытался преобразовать фактор в характер, дату и т. Д. Без кости.

Кроме того, мне нужно это как новая переменная в кадре данных, мне не нужно просто отображать ее в консоли; Dplyr отлично подходит для этого, но мне нужно это как переменная.

Любая помощь приветствуется, извините за то, что это, вероятно, элементарный вопрос.

Спасибо!

1 Ответ

0 голосов
/ 09 ноября 2018

Мы можем использовать mutate после группировки по 'id', 'date'

library(dplyr)
eg_data <- eg_data %>%
             group_by(id, date) %>%
             mutate(TotalSum = sum(sales))

Или с ave

eg_data$TotalSum = with(eg_data, ave(sales, id, date, FUN = sum))
...