【问题标题】:dplyr() and ggolot2()::geom_tile, filtering a group of summary statisticsdplyr() 和 ggolot2()::geom_tile,过滤一组汇总统计信息
【发布时间】:2017-11-20 15:20:54
【问题描述】:

我有一个数据框 (df),其中包含三个分类变量,分别是 site、purchase 和 happycustomer。

我想使用 gglot2 的 geom_tile 函数来创建客户体验热图。我希望网站在 x 轴上,在 y 轴上购买,并以happycustomer 作为填充。我希望热图能够显示按站点和购买分组的快乐客户的百分比(即,happycustomer 的值为 y 的客户)。

我的问题是,目前剧情中既有快乐的顾客,也有不快乐的顾客。

任何帮助将不胜感激。

起点(df):

df <- data.frame(site=c("GA","NY","BO","NY","BO","NY","BO","NY","BO","GA","NY","GA","NY","NY","NY"),purchase=c("a1","a2","a1","a1","a3","a1","a1","a3","a1","a2","a1","a2","a1","a2","a1"),happycustomer=c("n","y","n","y","y","y","n","y","n","y","y","y","n","y","n"))

当前代码:

library(ggplot2) 
library(dplyr)
df  %>% 
      group_by(site, purchase,happycustomer) %>% 
      summarize(bin = sum(happycustomer==happycustomer)) %>%
      group_by(site,happycustomer) %>%
      mutate(bin_per = (bin/sum(bin)*100)) %>%
      ggplot(aes(site,purchase)) + geom_tile(aes(fill = bin_per),colour = "white") + geom_text(aes(label = round(bin_per, 1))) +
      scale_fill_gradient(low = "blue", high = "red")

【问题讨论】:

    标签: r


    【解决方案1】:

    这是有两个数据框的解决方案。

    happyDF <- df  %>% 
     filter(happycustomer == "y") %>%
     group_by(site, purchase) %>% 
     summarise( n = n() ) 
    
    totalDF <- df  %>%
     group_by(site, purchase) %>% 
     summarise( n = n() ) 
    

    还有ggplot代码:

    merge(happyDF, totalDF, by=c("site", "purchase") ) %>%
     mutate(prop = 100 * (n.x / n.y) ) %>%
     ggplot(., aes(site, purchase)) +
      geom_tile(aes(fill = prop),colour = "white") +
      geom_text(aes(label = round(prop, 1))) +
     scale_fill_gradient(low = "blue", high = "red")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-30
      • 2019-03-19
      • 2023-03-14
      • 2017-07-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多