首页 > 解决方案 > 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 group2
1   1   1
2   1   2
3   1   3
4   2   1
5   2   2
6   2   3
7   3   1
8   3   2
9   3   3
10  4   1
11  4   3
12  1   1
13  1   2
14  1   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

但是,请注意 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

标签: r

解决方案


得到 后count,我们可以扩展 以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

或者如果我们做group_by, 而不是mutate然后做distinct, 直接使用summarise

df %>%
   group_by(group, group2) %>%
   summarise(n = n()) %>%
   ungroup %>%
   complete(group, group2, fill = list(n = 0))

推荐阅读