需要将带有“数量”列的记录分成数量始终为1的单个记录

时间:2019-06-26 23:58:08

标签: r data-manipulation

我有一个包含82147 obs和36个变量的数据集,我需要找到频率最高的“说明”列的前200个级别,但是数据集中有一个QTY列,所以尽管我发现了最频繁的一个级别的“说明”,我无法获得最频繁重复的项目的真实图片,因为每条记录还列出了不为1的数量。

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

Top20InvDesc

我已经尝试过并继续在互联网上搜索如何执行此操作,但是我也不知道如何正确地问这个问题,因此我正在研究很多类似的东西,但我所需要的只是这些。 / p>

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

Top20InvDesc

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

假设“注射器”是“描述”列中的级别之一,并且是最重复的级别,但是每条记录的QTY为5。在“描述”中还有一个“手套”级别”列,它是重复次数第五高的级别,但每个的“数量”为1000。我知道“手套”应该是我要制作的新数据框中的第一项,但是我无法弄清楚如何获取我的代码来执行此操作。解决问题的最简单方法是创建一个新的数据框,其中每个项目都列为“数量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 GB内存和180瓦电源,因此我想我需要处理更长的处理时间,但这也将使数据处理起来更加容易。

1 个答案:

答案 0 :(得分:0)

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