Необходимо разделить записи с колонкой QTY на отдельные записи, где QTY всегда 1 - PullRequest
0 голосов
/ 27 июня 2019

У меня есть набор данных с 82147 акциями и 36 переменными, и мне нужно найти 200 верхних уровней столбца «Описание» с самой высокой частотой, но в наборе данных есть столбец QTY, поэтому я нахожу наиболее частыеуровни «Описание», я не получаю истинную картину того, что является наиболее часто повторяющимися элементами, поскольку в каждой записи также указан QTY, который не равен 1.

Top20InvDesc <- names(sort(summary(as.factor(Inventory$Description)), 
                      decreasing=T)[1:20])

Top20InvDesc

Я пробовал это и продолжаю рыскатьИнтернет, как это сделать, но я также не знаю, как правильно задать этот вопрос, поэтому я смотрю на множество подобных вещей, но ничего, что мне нужно.

Top20InvDesc <- names(sort(summary(as.factor(Inventory$Description)), 
                      decreasing=T)[1:20])

Top20InvDesc

и

library(dplyr)
Inventory %>% 
  group_by(Description) %>%
  top_n(5, Qty)

Скажем, что «шприц» - это один из уровней в столбце «Описание», и это самый повторяющийся уровень, но количество записей в каждой записи равно 5. Существует также уровень «перчаток».в столбце «Описание» и это 5-й наиболее повторяющийся уровень, но QTY составляет 1000 для каждого.Я знаю, что «перчатки» должны быть первым элементом в новом фрейме данных, который я пытаюсь создать, но я не могу понять, как заставить мой код сделать это.Самый простой способ решить мою проблему - это создать новый фрейм данных, в котором каждый элемент указан как QTY 1 и использовать только самые верхние 20 элементов.

Что я получаю

Description
<fctr>
ARMBOARD INTRAVENOUS NEONATAL 4X1.5IN FOAM SEMIFLEXIBLE DISPOSABLE LATEX FREE-BG/24EA

Qty
<int>
32

Что я хочу получить, и теперь Armboard будет указан в списке 32 раза.

Description
<fctr>
ARMBOARD INTRAVENOUS NEONATAL 4X1.5IN FOAM SEMIFLEXIBLE DISPOSABLE LATEX FREE-BG/24EA

Qty
<int>
1

Мой ноутбук имеет 32 ГБ памяти и блок питания на 180 Вт, поэтому я подумал, что мне придется иметь дело с задержкойвремя обработки, но это также значительно облегчит работу с данными.

1 Ответ

0 голосов
/ 28 июня 2019
library(dplyr)
details_from_top20 <- Inventory %>%
  group_by(Description) %>% 
  summarise(n = sum(QTY)) %>% 
  top_n(20) %>%
  left_join(Inventory) 

Для воспроизводимого примера мы могли бы использовать mtcars и получить все данные для автомобилей, которые имеют передачу с наибольшим общим весом, в данном случае 3 передачи. (Это немного надумано, но структурно та же проблема.)

car_gears_with_top2_weights <- mtcars %>%
  group_by(gear) %>% 
  summarise(total_wt = sum(wt*1000)) %>% 
  top_n(1) %>%
  left_join(mtcars)

# A tibble: 15 x 12
    gear total_wt   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  carb
   <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1     3    58389  21.4     6  258    110  3.08  3.22  19.4     1     0     1
 2     3    58389  18.7     8  360    175  3.15  3.44  17.0     0     0     2
 3     3    58389  18.1     6  225    105  2.76  3.46  20.2     1     0     1
 4     3    58389  14.3     8  360    245  3.21  3.57  15.8     0     0     4
 5     3    58389  16.4     8  276.   180  3.07  4.07  17.4     0     0     3
 6     3    58389  17.3     8  276.   180  3.07  3.73  17.6     0     0     3
 7     3    58389  15.2     8  276.   180  3.07  3.78  18       0     0     3
 8     3    58389  10.4     8  472    205  2.93  5.25  18.0     0     0     4
 9     3    58389  10.4     8  460    215  3     5.42  17.8     0     0     4
10     3    58389  14.7     8  440    230  3.23  5.34  17.4     0     0     4
11     3    58389  21.5     4  120.    97  3.7   2.46  20.0     1     0     1
12     3    58389  15.5     8  318    150  2.76  3.52  16.9     0     0     2
13     3    58389  15.2     8  304    150  3.15  3.44  17.3     0     0     2
14     3    58389  13.3     8  350    245  3.73  3.84  15.4     0     0     4
15     3    58389  19.2     8  400    175  3.08  3.84  17.0     0     0     2
...