R: суммировать несколько столбцов с разными функциями суммирования с помощью dplyr приводит к ошибке?

Я перевожу набор данных о пути клиента с уровня агрегации пользователей на агрегацию на дневном уровне. Проблема в том, что я не могу просто суммировать или иметь в виду все столбцы, поскольку не все переменные можно агрегировать одинаково. Например, duration - это переменная, которую я хочу суммировать с помощью среднего, а purchase_own - это переменная, которую я хочу суммировать с помощью суммы.

Я использовал dplyr, чтобы заставить это работать, но это дает мне ошибку. Я пробовал следующий код:

CJd <- CJre %>% group_by(date) %>% summarise_at(vars(purchase_own, purchase_any, CIT, 
FIT, T1:T22, devicemobile, devicefixed, purchase_comp, POS_comp, POS_own, POS_any, 
markov, first_touch, last_touch, linear_touch), sum) 
%>% summarise_at(vars(duration, difference), mean) %>% summarise_at(CountTP, max)

Это приводит к ошибке:

Error in .f(.x[[i]], ...) : object 'duration' not found

Я подозреваю, что это означает, что summarise_at(vars(duration, difference), mean) не допускается в качестве второго сводного кода. Теперь мой вопрос: как я могу написать функцию суммирования, чтобы суммирование было другим для некоторых переменных?

Фактические результаты заключаются в том, что выполняется только первый summarise_at, что приводит к отсутствию переменных в моем наборе данных. Недостающие переменные должны быть обозначены соответственно mean и max. Ожидаемый результат - эти переменные, сгруппированные по date и суммированные по названным функциям, mean или max добавляются в набор данных.


person Marc van Eck    schedule 23.04.2019    source источник


Ответы (1)


Проблема в том, что после первого summarise_at, которое не включает «продолжительность», столбец отсутствует в сводных данных. Вместо этого, если мы используем mutate_at и создадим столбец, тогда получим distinct строк данных и summarise

CJre %>%
  group_by(date) %>%
  mutate_at(vars(purchase_own, purchase_any, CIT, 
               FIT, T1:T22, devicemobile, devicefixed, purchase_comp, 
               POS_comp, POS_own, POS_any, 
              markov, first_touch, last_touch, linear_touch), sum) %>%
  group_by(purchase_own, purchase_any, CIT, 
           FIT, T1:T22, devicemobile, devicefixed, purchase_comp,
            POS_comp, POS_own, POS_any, 
            markov, first_touch, last_touch, linear_touch, add = TRUE) %>%
  summarise_at(vars(duration, difference), mean)

markov, first_touch, last_touch, linear_touch), сумма)

person akrun    schedule 23.04.2019
comment
Не могли бы вы подробнее рассказать о предложении mutate_at относительно суммирования столбцов с использованием различных функций? Итак, как я могу использовать mutate_at для включения duration, суммированного с помощью функции mean вместо sum, как в других столбцах? - person Marc van Eck; 23.04.2019
comment
@MarcvanEck Я добавил один вариант. пожалуйста, проверьте - person akrun; 23.04.2019
comment
Спасибо. Я попробовал ваше решение, но оно дало другую ошибку: `` Ошибка: столбец T1:T22 должен иметь длину 383 (размер группы) или один, а не 156 Дополнительно: Предупреждающие сообщения: 1: В T1: T22: числовое выражение имеет 383 элемента : используется только первый 2: в T1: T22: числовое выражение содержит 383 элемента: используется только первый элемент '' - person Marc van Eck; 24.04.2019