首页 文章

transform()用dplyr()添加行

提问于
浏览
1

我有一个数据框(df)有两个变量,网站和购买 .

我想使用dplyr()按站点和购买对数据进行分组,并获取分组数据的计数和百分比 . 然而,我也喜欢使用名为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))

1 回答

  • 1

    我们可以从第一个输出代码块开始,在'site'分组后创建一个'ALLSITES'和'purchase'获取 sum 'bin'和'bin_per',然后用 bind_rows 行绑定两个数据集

    df1 %>%
      ungroup() %>%
      group_by(site = 'ALLSITES', purchase) %>%
      summarise(bin = sum(bin)) %>% 
      ungroup %>% 
      mutate(bin_per = 100*(bin/sum(bin))) %>% 
      bind_rows(df1, .)
    

相关问题