Подмножество R данных, основанное на пропорции общего значения столбца - PullRequest
0 голосов
/ 14 мая 2018

У меня есть фрейм данных df, как указано ниже (образец для простоты запроса):

ID       Sales
10001   214108 
10002   207858
10003    76548
10004    68361
10005    56456

Мне нужно задать подмножество df так, чтобы результирующие строки содержали 90% от общего объема продаж.Я сталкивался с этим подходом , но я не получаю желаемого результата.Я использовал следующее:

subset(df, Sales >= quantile(Sales,0.9))

Я получил следующее:

     >ID  Sales
     <dbl>  <dbl>
  1 10001 214108

Моя текущая идея - сделать это следующим образом:

  1. Добавить новый столбец, используя: df$Sales_pct = Sales/sum(Sales)
  2. Сортировка df в порядке убывания Sales_pct значений столбца
  3. Добавить еще один столбец с совокупным процентом, а затем подмножество строк, которые имеют накопительныйпроцентное значение меньше 0,9

Но я чувствую, что для этого должен быть лучший подход.Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 14 мая 2018

При использовании базового подхода R:

#1.Add a new column using: df$Sales_pct = Sales/sum(Sales)
df$Sales_pct <- with(df, Sales/sum(Sales))

#2.Sort df in descending order of Sales_pct column values
df <- df[order(df$Sales_pct, decreasing = TRUE), ]

#3.Add another column with cumulative percentage and then subset rows that have 
# the cumulative percentage value less than 0.9
df$Sales_cum <- cumsum(df$Sales_pct)
subset(df, Sales_cum < .90)

     ID  Sales Sales_pct Sales_cum
1 10001 214108 0.3434901 0.3434901
2 10002 207858 0.3334633 0.6769533
3 10003  76548 0.1228047 0.7997581

A tidyverse заход на посадку

df %>% mutate(Sales_pct = Sales/sum(Sales)) %>% 
  arrange(-Sales_pct) %>% 
  mutate(Sales_cum = cumsum(Sales_pct)) %>% 
  filter(Sales_cum <= 0.90)
...