R 完成分组,然后将零添加到缺少的单元格

R 完成分组,然后将零添加到缺少的单元格,r,R,如何在R中使用dplyr执行此操作。我有这张桌子 Product Week Count A Wk1 2 A Wk2 2 B Wk1 3 C Wk2 4 C Wk3 3 我希望输出是这样的 Product Week Count A Wk1 2 A Wk2 2 A Wk3 0 B

如何在R中使用
dplyr
执行此操作。我有这张桌子

Product   Week    Count
A         Wk1     2 
A         Wk2     2 
B         Wk1     3
C         Wk2     4
C         Wk3     3
我希望输出是这样的

Product   Week   Count
A         Wk1     2
A         Wk2     2
A         Wk3     0
B         Wk1     3
B         Wk2     0
B         Wk3     0
C         Wk1     0
C         Wk2     4
C         Wk3     3

这里有一种方法可以为缺少的产品周组合添加计数为零的行:

# 0. attach dplyr for join, mutate, and magrittr pipe (%>%)
library(dplyr)

# 1. get the data as a data frame 
dat <- read.table(text="
Product   Week    Count
A         Wk1     2 
A         Wk2     2 
B         Wk1     3
C         Wk2     4
C         Wk3     3
", header=TRUE)

# 2. get unique products and unique weeks 
products <- unique(dat$Product)
weeks <- unique(dat$Week)

# 3.1 create a df with all combos of product and week 
expand.grid(Product=products, Week=weeks, stringsAsFactors=FALSE) %>%
  # 3.2 join it with original data (introduces NA counts for missing combos)
  left_join(dat, by=c("Product", "Week")) %>% 
  # 3.3 replace NA counts with zero 
  mutate(Count = ifelse(is.na(Count), 0, Count))
#0。将dplyr附加到连接、变异和magrittr管道(%%>%)
图书馆(dplyr)
# 1. 以数据帧的形式获取数据

dat这里有一种方法可以为缺少的产品周组合添加计数为零的行:

# 0. attach dplyr for join, mutate, and magrittr pipe (%>%)
library(dplyr)

# 1. get the data as a data frame 
dat <- read.table(text="
Product   Week    Count
A         Wk1     2 
A         Wk2     2 
B         Wk1     3
C         Wk2     4
C         Wk3     3
", header=TRUE)

# 2. get unique products and unique weeks 
products <- unique(dat$Product)
weeks <- unique(dat$Week)

# 3.1 create a df with all combos of product and week 
expand.grid(Product=products, Week=weeks, stringsAsFactors=FALSE) %>%
  # 3.2 join it with original data (introduces NA counts for missing combos)
  left_join(dat, by=c("Product", "Week")) %>% 
  # 3.3 replace NA counts with zero 
  mutate(Count = ifelse(is.na(Count), 0, Count))
#0。将dplyr附加到连接、变异和magrittr管道(%%>%)
图书馆(dplyr)
# 1. 以数据帧的形式获取数据

dat使用
tidyverse
包以下代码将完成缺失组合,允许您指定缺失组合的值:

library(tidyverse)
my_df %>%
    complete(Product,Week,fill=list(Count=0))
结果是:

# A tibble: 9 x 3
  Product Week  Count
  <chr>   <chr> <dbl>
1 A       Wk1    2.00
2 A       Wk2    2.00
3 A       Wk3    0   
4 B       Wk1    3.00
5 B       Wk2    0   
6 B       Wk3    0   
7 C       Wk1    0   
8 C       Wk2    4.00
9 C       Wk3    3.00
#一个tible:9 x 3
产品周数
1 A Wk1 2.00
2 A Wk2.00
3 A Wk3 0
4 B Wk1 3.00
5B Wk2 0
6 B Wk3 0
7 C Wk1 0
8 C Wk2 4.00
9 C Wk3.00

使用
tidyverse
软件包以下代码将完成缺失的组合,允许您指定缺失组合的值:

library(tidyverse)
my_df %>%
    complete(Product,Week,fill=list(Count=0))
结果是:

# A tibble: 9 x 3
  Product Week  Count
  <chr>   <chr> <dbl>
1 A       Wk1    2.00
2 A       Wk2    2.00
3 A       Wk3    0   
4 B       Wk1    3.00
5 B       Wk2    0   
6 B       Wk3    0   
7 C       Wk1    0   
8 C       Wk2    4.00
9 C       Wk3    3.00
#一个tible:9 x 3
产品周数
1 A Wk1 2.00
2 A Wk2.00
3 A Wk3 0
4 B Wk1 3.00
5B Wk2 0
6 B Wk3 0
7 C Wk1 0
8 C Wk2 4.00
9 C Wk3.00

到目前为止您尝试了什么?你的实际代码在哪里?到目前为止你尝试了什么?您的实际代码在哪里?我们的R基础设施还不支持此库。任何其他可以完成这样的简短任务的库?
tidyr
,函数
complete
来自
tidyr
Scipione,我可以再问你一个与我的问题有关的问题吗。我想计算每周唯一值的数量(假设我需要每个产品的3周计数),但如果少于3周,我想复制前一周的计数,并将零计数和更改列名为第3周。在评论中回答您有点困难,因为我不确定我是否能找出你想要的输出…也许你的问题还存在于SO中。不管它是否存在,尝试提出一个新问题,SO社区将帮助您。输入产品周计数1 a Wk1 2.00 2 B Wk2 2.00 3 C Wk3 1.00 4 a Wk1 3.00 5 B Wk2 2.00 6 C Wk3 1.00 7 a Wk1 2.00输出1 a Wk1 2.00 2 B Wk2 2.00 3 C Wk31.00 4 A Wk1 3.00 5 B Wk2 2.00 6 C Wk3 1.00 7 A Wk1 0 8 B Wk2 0 9 C Wk3 0这里是输入与输出。也许会有帮助。我认为解决方案接近于此,因为我们的基础设施还不支持此库。任何其他可以完成这样的简短任务的库?
tidyr
,函数
complete
来自
tidyr
Scipione,我可以再问你一个与我的问题有关的问题吗。我想计算每周唯一值的数量(假设我需要每个产品的3周计数),但如果少于3周,我想复制前一周的计数,并将零计数和更改列名为第3周。在评论中回答您有点困难,因为我不确定我是否能找出你想要的输出…也许你的问题还存在于SO中。不管它是否存在,尝试提出一个新问题,SO社区将帮助您。输入产品周计数1 a Wk1 2.00 2 B Wk2 2.00 3 C Wk3 1.00 4 a Wk1 3.00 5 B Wk2 2.00 6 C Wk3 1.00 7 a Wk1 2.00输出1 a Wk1 2.00 2 B Wk2 2.00 3 C Wk31.00 4 A Wk1 3.00 5 B Wk2 2.00 6 C Wk3 1.00 7 A Wk1 0 8 B Wk2 0 9 C Wk3 0这里是输入与输出。也许会有帮助。我认为解决办法也很接近这个