R语言 基于两列生成组的运行计数

f87krz0w  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(71)

我想得到一个dataframe的计数的总金额的项目出售的一天,但在“结束”的一天。
例如,我有以下数据:

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
vltsax25

vltsax251#

您可以使用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
lp0sw83n

lp0sw83n2#

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

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

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

相关问题