在R中是否有一种方法可以填补缺少观察的缺失组?

在R中是否有一种方法可以填补缺少观察的缺失组?,r,R,假设我有这样的东西: df<-data.frame(group=c(1, 1,1, 2,2,2,3,3,3,4,4, 1, 1,1), group2=c(1,2,3,1,2,3,1,2,3,1,3, 1,2,3)) 我的目标是计算group=something和group2=something的唯一实例数。像这样: df1<-df%>%group_by(group, group2)%>% mutate(want=n())%>%dis

假设我有这样的东西:

df<-data.frame(group=c(1, 1,1, 2,2,2,3,3,3,4,4, 1, 1,1), 
               group2=c(1,2,3,1,2,3,1,2,3,1,3, 1,2,3))
我的目标是计算group=something和group2=something的唯一实例数。像这样:

df1<-df%>%group_by(group, group2)%>% mutate(want=n())%>%distinct(group, group2, .keep_all=TRUE)

   group group2  want
   <dbl>  <dbl> <int>
 1     1      1     2
 2     1      2     2
 3     1      3     2
 4     2      1     1
 5     2      2     1
 6     2      3     1
 7     3      1     1
 8     3      2     1
 9     3      3     1
10     4      1     1
11     4      3     1

df1%group\u by(group,group2)%%>%mutate(want=n())%%>%distinct(group,group2,.keep\u all=TRUE)
第二组想要什么
1     1      1     2
2     1      2     2
3     1      3     2
4     2      1     1
5     2      2     1
6     2      3     1
7     3      1     1
8     3      2     1
9     3      3     1
10     4      1     1
11     4      3     1
但是,请注意,group=4,group2=2并不在我的数据集中。是否有某种自动填充功能,我可以在其中用零填充这些非观测值,以便轻松获得以下值

   group group2  want
   <dbl>  <dbl> <int>
 1     1      1     2
 2     1      2     2
 3     1      3     2
 4     2      1     1
 5     2      2     1
 6     2      3     1
 7     3      1     1
 8     3      2     1
 9     3      3     1
10     4      1     1
11     4      2     0
12     4      3     1
group2想要什么
1     1      1     2
2     1      2     2
3     1      3     2
4     2      1     1
5     2      2     1
6     2      3     1
7     3      1     1
8     3      2     1
9     3      3     1
10     4      1     1
11     4      2     0
12     4      3     1

获得
计数后,我们可以使用
complete
展开,以0填充缺少的组合

library(dplyr)
library(tidyr)
df %>% 
   count(group, group2) %>% 
   complete(group, group2, fill = list(n = 0))
# A tibble: 12 x 3
#   group group2     n
#   <dbl>  <dbl> <dbl>
# 1     1      1     2
# 2     1      2     2
# 3     1      3     2
# 4     2      1     1
# 5     2      2     1
# 6     2      3     1
# 7     3      1     1
# 8     3      2     1
# 9     3      3     1
#10     4      1     1
#11     4      2     0
#12     4      3     1

下面是一个
数据。表
解决此问题的方法:

library(data.table)
setDT(df)[CJ(group, group2, unique = TRUE), 
          c(.SD, .(want = .N)), .EACHI, 
          on = c("group", "group2")]

# group group2  want
#     1      1     2
#     1      2     2
#     1      3     2
#     2      1     1
#     2      2     1
#     2      3     1
#     3      1     1
#     3      2     1
#     3      3     1
#     4      1     1
#     4      2     0
#     4      3     1
df %>%
   group_by(group, group2) %>%
   summarise(n = n()) %>%
   ungroup %>%
   complete(group, group2, fill = list(n = 0))
library(data.table)
setDT(df)[CJ(group, group2, unique = TRUE), 
          c(.SD, .(want = .N)), .EACHI, 
          on = c("group", "group2")]

# group group2  want
#     1      1     2
#     1      2     2
#     1      3     2
#     2      1     1
#     2      2     1
#     2      3     1
#     3      1     1
#     3      2     1
#     3      3     1
#     4      1     1
#     4      2     0
#     4      3     1