是否有R函数进行pareto分析

时间:2019-07-03 17:21:06

标签: r

我有一个包含供应商,类别和支出的数据集。我需要对供应商进行pareto分析。但是,此供应商在多个类别中重复出现。例如

SCNBox

以上是数据集。但是我需要根据供应商的总支出来进行比较。如果我采取行动,我将获得供应商D,F,A,E和G作为前80名的支出。所以我需要添加一个看起来像

的列
      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

1 个答案:

答案 0 :(得分:0)

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