【发布时间】:2018-05-03 16:23:58
【问题描述】:
我有一个数据框 (df),其中包含两个变量:site 和 purchase。
我想使用 dplyr() 按站点和购买对我的数据进行分组,并获取分组数据的计数和百分比。但是,我也希望 tibble 具有称为 ALLSITES 的行,代表按购买分组的所有网站的数据,因此我最终得到一个类似于 dfgoal 的 tibble。
问题是我当前的代码没有让我获得 ALLSITES 行。我尝试将基本 R 函数添加到 dplyr() 中,但它不起作用。
任何帮助将不胜感激。
起点(df):
df <- data.frame(site=c("LON","MAD","PAR","MAD","PAR","MAD","PAR","MAD","PAR","LON","MAD","LON","MAD","MAD","MAD"),purchase=c("a1","a2","a1","a1","a1","a1","a1","a1","a1","a2","a1","a2","a1","a2","a1"))
期望的结果:
dfgoal <- data.frame(site=c("LON","LON","MAD","MAD","PAR","ALLSITES","ALLSITES"),purchase=c("a1","a2","a1","a2","a1","a1","a2"),bin=c(1,2,6,2,4,11,4),pin_per=c(33.33333,66.66667,75.00000,25.00000,100.00000,73.33333,26.66666))
当前代码:
library(dplyr)
df %>%
group_by(site, purchase) %>%
summarize(bin = sum(purchase==purchase)) %>%
group_by(site) %>%
mutate(bin_per = (bin/sum(bin)*100))
df %>%
rbind(df, transform(df, site = "ALLSITES") %>%
group_by(site, purchase) %>%
summarize(bin = sum(purchase==purchase)) %>%
group_by(site) %>%
mutate(bin_per = (bin/sum(bin)*100))
【问题讨论】:
-
假设如果
df1是第一个输出那么df1 %>% ungroup() %>% group_by(site = 'ALLSITES', purchase) %>% summarise(bin = sum(bin)) %>% ungroup %>% mutate(bin_per = 100*(bin/sum(bin))) %>% bind_rows(df1, .)
标签: r