假设我们有一个包含两个变量var1
和var2
的数据框,每个变量具有两个级别
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-D
和B-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个单元格?
答案 0 :(得分:2)
我们可能将ungroup
与df2 %>% 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
或distinct
和df2 %>% 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