在汇总表中显示具有零个因子实例的单元格,而不是忽略它们

时间:2019-01-11 01:35:31

标签: r dplyr tidyverse

假设我们有一个包含两个变量var1var2的数据框,每个变量具有两个级别

library(dplyr)
df <- data.frame(var1 = factor(sample(c("A", "B"), 20, replace = T)),
                 var2 = factor(rep(c("C","D"), each = 10)))

当我们总结此数据框时

df %>% group_by(var1, var2) %>% summarise(count = n())

我们得到

# A tibble: 4 x 3
# Groups:   var1 [?]
  var1  var2  count
  <fct> <fct> <int>
1 A     C         5
2 A     D         4
3 B     C         5
4 B     D         6

但是如果我们删除一个因素的所有实例

df2 <- df[1:10,]

总结

df2 %>% group_by(var1, var2) %>% summarise(count = n())

我们得到

# A tibble: 2 x 3
# Groups:   var1 [?]
  var1  var2  count
  <fct> <fct> <int>
1 A     C         5
2 B     C         5

{不足为奇的} A-DB-D单元格未被汇总,因为这些单元格中不再有任何实例。

我的问题是是否有任何快速方法将这些单元格报告为0,而不是从汇总表中忽略它们?

我知道D的{​​{1}}级别仍然嵌入在var2的那个因素中,因为

df2

收益

str(df2)

那么我如何也'data.frame': 10 obs. of 2 variables: $ var1: Factor w/ 2 levels "A","B": 1 2 1 1 2 2 2 2 1 1 $ var2: Factor w/ 2 levels "C","D": 1 1 1 1 1 1 1 1 1 1 报告0个单元格?

1 个答案:

答案 0 :(得分:2)

我们可能将ungroupdf2 %>% group_by(var1, var2) %>% summarise(count = n()) %>% ungroup() %>% complete(var1, var2, fill = list(count = 0)) # A tibble: 4 x 3 # var1 var2 count # <fct> <fct> <dbl> # 1 A C 3 # 2 A D 0 # 3 B C 7 # 4 B D 0 一起使用(如果不使用,则会得到太多的组合):

complete

distinctdf2 %>% group_by(var1, var2) %>% summarise(count = n()) %>% complete(var1, var2, fill = list(count = 0)) %>% distinct() # A tibble: 4 x 3 # var1 var2 count # <fct> <fct> <dbl> # 1 A C 3 # 2 A D 0 # 3 B C 7 # 4 B D 0

READ_CALL_LOG