【问题标题】:How to create a funnel view in R如何在 R 中创建漏斗视图
【发布时间】:2021-07-28 13:21:25
【问题描述】:

我有一个具有以下结构的数据框。

ProdID         Date                    class          price        set
PD-10011       2021-05-01 10:12:16     Regular        1000         ZR
PD-10712       2021-05-02 18:12:06     Premium        1000         ZR
PD-10213       2021-05-02 16:02:59     Premium        1000         ZR
PD-10814       2021-05-03 17:12:06     Premium        1000         RS
PD-10315       2021-05-04 19:10:11     Other          1000         RR
PD-10616       2021-05-04 13:18:14     Expired        1000         ZR
PD-10617       2021-05-04 15:14:19     Regular        1000         ZR

考虑到以下条件,我需要利用数据框创建漏斗视图:

5 月 21 日,应根据日期自动填充月份。如果有多个月份的记录,则应按月份降序排列。这里,Total 是该特定月份的 Total Unique ProdID 计数。 Regular 是那些 ProdID 的计数和总和,这些 ProdID 具有“常规”类和“高级”行的类似逻辑。 miscellaneous 行是 ProdID 的计数,其类别不是“Regular”和“Premium”。 RS (Premium) 是类为“Premium”且设置为“RS”的那些的计数和总和。

May-21           Count of ProdID       Percentage Count       Sum of Price        Percentage Sum
Total            7                     100.00%                7000                100.00%
Regular          2                     28.57%                 2000                28.57%
Premium          3                     42.85%                 3000                42.85%
miscellaneous    2                     28.57%                 2000                28.57%
RS (Premium)     1                     33.33%                 1000                33.33%  

         

【问题讨论】:

  • 你应该只关注一个问题。

标签: r dataframe dplyr tidyverse tidyr


【解决方案1】:

在 StackOverflow 上,您应该展示自己解决问题的尝试。话虽如此,这应该让你开始:

library(tidyverse)
library(lubridate)
library(janitor)

df <- tibble::tribble(
                                      ~ProdID,                 ~Date,    ~class, ~price, ~set,
                                   "PD-10011", "2021-05-01 10:12:16", "Regular",  1000L, "ZR",
                                   "PD-10712", "2021-05-02 18:12:06", "Premium",  1000L, "ZR",
                                   "PD-10213", "2021-05-02 16:02:59", "Premium",  1000L, "ZR",
                                   "PD-10814", "2021-05-03 17:12:06", "Premium",  1000L, "RS",
                                   "PD-10315", "2021-05-04 19:10:11",   "Other",  1000L, "RR",
                                   "PD-10616", "2021-05-04 13:18:14", "Expired",  1000L, "ZR",
                                   "PD-10617", "2021-05-04 15:14:19", "Regular",  1000L, "ZR"
                                   )
df %>%
  mutate(Date = ymd_hms(Date)) %>% 
  filter(Date %within% interval("2021-05-01", "2021-05-31")) %>%
  mutate(class = case_when(class == "Premium" & set == "RS" ~ "RS (Premium)",
                           class != "Premium" & class != "Regular" ~ "miscellaneous",
                           class == "Premium" ~ "Premium",
                           class == "Regular" ~ "Regular")) %>% 
  group_by(class, price) %>% 
  summarise(count_of_prod_ID = n()) %>% 
  ungroup() %>% 
  mutate(`Sum of Price` = count_of_prod_ID * price,
         `Count (%)` = round((count_of_prod_ID / 7)*100, 2)) %>%
  janitor::adorn_totals() %>% 
  select(-c(price)) %>% 
  arrange(desc(count_of_prod_ID))
#>        class count_of_prod_ID Sum of Price Count (%)
#>         Total                7         7000    100.00
#> miscellaneous                2         2000     28.57
#>       Premium                2         2000     28.57
#>       Regular                2         2000     28.57
#>  RS (Premium)                1         1000     14.29

【讨论】:

  • 如何将RS (Premium) 计数与最后一行的Premium 计数相除。
  • 您想将RS (Premium) 算作Premium 吗?但是你所有的百分比都将关闭
  • 不是全部,我只需要最后一行。
  • 我不知道该怎么做。如果您将RS (Premium) 算作Premium(即算两次),那么什么都不会加起来,例如如果RS (Premium) = 1Premium = 3,那么您的总产品数将为8...我不确定如何汇总行子集,然后打印所有行。对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多