Определите продукты, которые составляют 80% от общего числа - PullRequest
0 голосов
/ 19 октября 2018

Я нашел похожий вопрос и ответ в Python ( определил записи, которые составляют 90% от общего числа ), но не смог перевести его на R.

Я пытаюсьвычислите наименьшее количество продуктов, которые составляют не менее 80% (это будет переменная, поскольку% может измениться) от продаж.

Например:

Product  Sales
A        100
B        40
C        10
D        15 
Total    165

Ответ долженБыть может, я могу получить 132 (80% продаж), указав два пункта.Результат должен выглядеть следующим образом:

Product  Sales
A        100
B        40

Любая помощь, которую вы можете предоставить, будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

s_t ответ прост и эффективен, но если вы ищете решение для базовой R и функцию:

example <- data.frame(Product = c("A", "B", "C", "D"), Sales = c(100, 40, 10, 15))

min.products <- function(Product, Sales, percent){
  df <- data.frame(Product, Sales)
  minimum <- percent*sum(df$Sales)
  df <- df[order(-df$Sales), ]
  lowest.score <- df$Sales[cumsum(df$Sales)>minimum][1]
  answer <- df$Product[df$Sales>=lowest.score]
  return(answer)
}
min.products(example$Product, example$Sales, 0.8)
0 голосов
/ 19 октября 2018

Как насчет решения dplyr:
Редактировать :

Вот решение, которое кажется подходящим:

# your threshold
constant <- 0.5

data %>% 
# order
arrange(-Sales)%>% 
# add the cumulative
  mutate(cumulative = round(cumsum(Sales)/sum(Sales),2),
# add a threshold, the difference between the constant and the cumulative
         threshold = round(cumsum(Sales)/sum(Sales),2)- constant) %>%
# last, find all above the min value positive under the threshold
         filter(threshold <= min(.$threshold[.$threshold > 0]))

# for 0.8
  Product Sales cumulative threshold
1       A   100       0.61     -0.19
2       B    40       0.85      0.05

# for 0.5
  Product Sales cumulative threshold
1       A   100       0.61     -0.19

С данными:

data <- read.table(text ="Product  Sales
A        100
B        40
C        10
D        15", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...