R:使用dplyr使用不同的求和函数汇总多列会导致错误?

时间:2019-04-23 12:14:40

标签: r dplyr grouping summarization

我正在将客户旅程数据集从用户聚合级别转换为每日聚合级别。问题是我不能简单地对所有列求和或求平均值,因为不是所有变量都可以相同的方式聚合。例如,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)作为第二摘要代码。现在我的问题是,如何编写summary函数,以便某些变量的求和不同?

实际结果是仅执行第一个summarise_at,这导致数据集中的变量丢失。缺少的变量需要分别用meanmax进行汇总。预期结果是将这些变量按date分组并通过命名函数的平均值或最大值进行汇总,然后将其添加到数据集中。

1 个答案:

答案 0 :(得分:0)

问题在于,因此第一个summarise_at(不包括“ duration”)之后因此,汇总数据中没有该列。相反,如果我们使用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)和)