Отображение диапазонов и суммы до тех пор, пока условие не будет выполнено - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть файл Excel, который имеет две колонки, первая для клиентов, а вторая - доход, полученный от них.Допустим, мой общий доход составляет 1000. Мне нужно разделить этот общий доход на 5 сегментов, т. Е. 20% от общего дохода (0-200), 40% от общего дохода (200-400), 60% от общего дохода (400-600), 80% общего дохода (600-800) и 100% общего дохода (800-1000).Я хочу подсчитать количество клиентов в каждом диапазоне сегментов, например, сколько клиентов находится в диапазоне, где сумма дохода <20% от общего дохода и т. Д. Для других диапазонов, и, наконец, построить их с помощью гистограммы.Как я могу сделать это в R?Ниже приведен пример данных: </p>

 Customer   Revenue
    a          230
    b          170
    c          809
    d          435
    e          678
    f          350
    g          465
    h          990
    i          767
    j          500

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Исходные данные:

df <- tibble(Customer = letters[1:10], Revenue = c(230, 170, 809, 435, 678, 350, 465, 990, 767, 500))

library(dplyr)
library(ggplot2)

Упорядочить data.frame по возрастанию Выручка

df <- df %>% 
  arrange(Revenue)

Используйте функцию cut () из базы R, чтобы добавить переменную, отображающую в каком изв 5 бункерах находится совокупный доход.Затем построите график, используя ось x для бинов и ось y для количества значений для этой категориальной переменной.

    df %>% 
      mutate(Revenue_Cumulated = cumsum(Revenue)/sum(Revenue)) %>% 
      mutate(bins = cut(Revenue_Cumulated, breaks = seq(0, 1, 0.2))) %>% 
      group_by(bins) %>% 
      summarise(n = n()) %>% 
      mutate(cumulated_n = cumsum(n)) %>% 

    # data.frame at that point in the code:
    # A tibble: 5 x 3
    #  bins          n cumulated_n
    #  <fct>     <int>       <int>
    # 1 (0,0.2]       3           3
    # 2 (0.2,0.4]     3           6
    # 3 (0.4,0.6]     1           7
    # 4 (0.6,0.8]     1           8
    # 5 (0.8,1]       2          10

    gather(key, value, -bins) %>% 
    ggplot(aes(x = bins, y = value, fill = key)) +
    geom_col(position = "dodge")+
    geom_text(aes(label=value),position=position_dodge(width=0.9),vjust=-0.25)

Теперь cumulated_n сообщит, сколько клиентов вносят вклад в 0-X процентов.Функция сбора предназначена для преобразования данных в более длинный формат, что упрощает обработку «n» и «cumulated_n» как факторов, подчеркивающих разницу в графике.

Number_customers_by_bin

Number_and_Number_cumulated_Custormers_by_bin

0 голосов
/ 11 февраля 2019

Вы можете нарисовать гистограмму дохода напрямую, R сделает бинирование для вас:

Revenue <- c(230, 170, 809, 435, 678, 350, 465, 990, 767, 500)
hist(Revenue, breaks = seq(0, 1000, 200))

histogram

...