根据两列生成组的运行计数

时间:2019-06-05 17:55:49

标签: r dplyr

我想获得一个数据框,该数据框是按天(但在一天的“结束”时)销售的商品总数的计数。

例如,我有以下数据:

Item    Day Facility
Item_A  Day1    B
Item_B  Day1    A
Item_B  Day1    B
Item_C  Day2    B
Item_A  Day2    A
Item_C  Day2    C
Item_B  Day2    A
Item_B  Day2    A
Item_C  Day3    A

我想要一个表,该表显示当天结束+前几天的总销售商品。我包含了一个虚拟列,因为我的数据还有其他不需要的列。

例如:

Item    Day Facility    Item_Total_Accumulative
Item_A  Day1    B   1
Item_B  Day1    A   2
Item_B  Day1    B   2
Item_C  Day2    B   2
Item_A  Day2    A   2
Item_C  Day2    C   2
Item_B  Day2    A   4
Item_B  Day2    A   4
Item_C  Day3    A   3

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用group_by()mutate()(或count())来计算每天和每个项目,对于计算,我认为函数cumsum()将(累计)。

由于您的变量Facility不是数字,因此我添加了变量Value = 1,但是使用count()是更好的方法(与注释行相同的结果)。

然后只用先前的结果制作一个left_join(),您就可以找到所需的内容。

library(dplyr)

 df %>%
  count(Item, Day) %>%
  group_by(Item) %>%
  mutate(Item_Total_Accumulative = cumsum(n)) %>% 
  select(-n) %>% 
  left_join(df,.)

#> Joining, by = c("Item", "Day")
#>     Item  Day Facility Item_Total_Accumulative
#> 1 Item_A Day1        B                       1
#> 2 Item_B Day1        A                       2
#> 3 Item_B Day1        B                       2
#> 4 Item_C Day2        B                       2
#> 5 Item_A Day2        A                       2
#> 6 Item_C Day2        C                       2
#> 7 Item_B Day2        A                       4
#> 8 Item_B Day2        A                       4
#> 9 Item_C Day3        A                       3

答案 1 :(得分:1)

应该有一种更简单的方法,但是我的快速涂鸦是这样显示的:

library(dplyr)
library(tidyr)

df %>%
  group_by(Day, Item) %>%
  count() %>%
  group_by(Item) %>%
  mutate(Item_Total_Accumulative=lag(n, default = 0) + n) %>% 
  group_by(Day, Item, Item_Total_Accumulative) %>% 
  expand(n=1:n) %>% 
  select(-n)

#> # A tibble: 9 x 3
#> # Groups:   Day, Item, Item_Total_Accumulative [6]
#>   Day   Item   Item_Total_Accumulative
#>   <fct> <fct>                    <dbl>
#> 1 Day1  Item_A                       1
#> 2 Day1  Item_B                       2
#> 3 Day1  Item_B                       2
#> 4 Day2  Item_A                       2
#> 5 Day2  Item_B                       4
#> 6 Day2  Item_B                       4
#> 7 Day2  Item_C                       2
#> 8 Day2  Item_C                       2
#> 9 Day3  Item_C                       3

reprex package(v0.3.0)于2019-06-05创建