【问题标题】:transform() to add rows with dplyr()transform() 使用 dplyr() 添加行
【发布时间】: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 %&gt;% ungroup() %&gt;% group_by(site = 'ALLSITES', purchase) %&gt;% summarise(bin = sum(bin)) %&gt;% ungroup %&gt;% mutate(bin_per = 100*(bin/sum(bin))) %&gt;% bind_rows(df1, .)

标签: r


【解决方案1】:

我们可以从第一个输出代码块开始,在按“站点”和创建的“ALLSITES”和“购买”字符串分组后,得到“bin”的sum,然后是“bin_per”,然后用@987654322 @row 绑定两个数据集

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2016-02-07
    • 2014-06-20
    • 2022-12-11
    • 2021-03-15
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多