Есть ли функция R для анализа по Парето? - PullRequest
0 голосов
/ 03 июля 2019

У меня есть набор данных с поставщиком, категориями и расходами.Мне нужно провести анализ Парето в отношении поставщиков.Но это поставщики повторяются по нескольким категориям.Например,

      Supplier  Value   Category
       A            92     asrg
       A            411    gdfg
       B            160    asrg
       C            239    gdfg
       D            384    asrg
       D            474    gdfg
       E            134    asrg
       E            344    gdfg
       F            483    asrg
       F            196    gdfg
       G            66     asrg
       G            236    gdfg

Выше указан набор данных.Но мне нужно парето на основе общих расходов поставщиков.Если я сделаю поворот, я получу Поставщика D, F, A, E и G в качестве расходов 80 лучших.Поэтому мне нужно добавить столбец, который должен выглядеть как

  Supplier  Value   Category   Top 80/Bottom 20
   A            92     asrg        Top 80
   A            411    gdfg        Top 80
   B            160    asrg        Bottom 20
   C            239    gdfg        Bottom 20
   D            384    asrg        Top 80
   D            474    gdfg        Top 80
   E            134    asrg        Top 80
   E            344    gdfg        Top 80
   F            483    asrg        Top 80
   F            196    gdfg        Top 80
   G            66     asrg        Top 80
   G            236    gdfg        Top 80

1 Ответ

0 голосов
/ 04 июля 2019
d <- read.table(text = " Supplier  Value   Category
       A            92     asrg
                A            411    gdfg
                B            160    asrg
                C            239    gdfg
                D            384    asrg
                D            474    gdfg
                E            134    asrg
                E            344    gdfg
                F            483    asrg
                F            196    gdfg
                G            66     asrg
                G            236    gdfg", header = TRUE)
d

get_20pct_limit <- function(id, x) {
  res <- aggregate(x ~ id, FUN = sum)
  res <- setNames(ifelse(quantile(res$x, probs = c(0.2)) > res$x,  "Bottom 20", "Top 80"),
                  res$id)
  res
}

d$`Top 80/Bottom 20` <- get_20pct_limit(d$Supplier, d$Value)[d$Supplier]
d

#   Supplier Value Category Top 80/Bottom 20
#1         A    92     asrg           Top 80
#2         A   411     gdfg           Top 80
#3         B   160     asrg        Bottom 20
#4         C   239     gdfg        Bottom 20
#5         D   384     asrg           Top 80
#6         D   474     gdfg           Top 80
#7         E   134     asrg           Top 80
#8         E   344     gdfg           Top 80
#9         F   483     asrg           Top 80
#10        F   196     gdfg           Top 80
#11        G    66     asrg           Top 80
#12        G   236     gdfg           Top 80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...