R: суммировать несколько столбцов с различными функциями суммирования, используя результаты dplyr по ошибке? - PullRequest
0 голосов
/ 23 апреля 2019

Я преобразовываю набор данных о поездках клиентов из уровня агрегации пользователей в уровень агрегации за день. Проблема в том, что я не могу просто суммировать или иметь в виду все столбцы, поскольку не все переменные могут быть агрегированы одинаково. Например, 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 и суммированные по названным функциям, означают среднее или максимальное, добавляются в набор данных.

1 Ответ

0 голосов
/ 23 апреля 2019

Проблема в том, что после первого 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), sum)

...