R `数据.表格`如何让`关键字`包含所有因素组合?

R `数据.表格`如何让`关键字`包含所有因素组合?,r,group-by,data.table,R,Group By,Data.table,我有一个数据。表,我想计算a和b的每个组合的出现次数: dt1 <- data.table( a = c(1,1,1,1,2,2,2,2,3,3,3,3), b = c(1,1,2,2,1,1,1,1,1,2,2,2) %>% letters[.] ) # a b # 1: 1 a # 2: 1 a # 3: 1 b # 4: 1 b # 5: 2 a # 6: 2 a # 7: 2 a # 8: 2 a # 9: 3 a # 10: 3 b # 11: 3 b # 1

我有一个
数据。表
,我想计算
a
b
的每个组合的出现次数:

dt1 <- data.table(
  a = c(1,1,1,1,2,2,2,2,3,3,3,3),
  b = c(1,1,2,2,1,1,1,1,1,2,2,2) %>% letters[.]
)
#    a b
# 1: 1 a
# 2: 1 a
# 3: 1 b
# 4: 1 b
# 5: 2 a
# 6: 2 a
# 7: 2 a
# 8: 2 a
# 9: 3 a
# 10: 3 b
# 11: 3 b
# 12: 3 b
dt1[, .N, keyby = .(a, b)]
#    a b N
# 1: 1 a 2
# 2: 1 b 2
# 3: 2 a 4
# 4: 3 a 1
# 5: 3 b 3

使用循环或应用系列最直观的方法,但对于我的大型数据集来说,它效率低下。有什么想法吗?

这是一个tidyr/dplyr方法:

dt1 %>% 
  group_by(a,b) %>% 
  summarise(c = length(.)) %>% 
  ungroup %>%
  complete(a,b, fill = list(c = 0))

c(1,1,2,2,1,1,1,1,1,2,2)%%>%个字母[。]
+1这个好主意!你能解释一下
fill
summary
的关键字吗?Complete是dplyr::left_join的包装,但它是tidyr函数。您可以传递填充值并用它替换NA。在本例中,NA替换为0。感谢您的回复。当然,所以NAs将被替换为
0
list(c=0)do做什么?可能会有更多的列需要替换NA,所以请将这些列放在这里。
dt1 %>% 
  group_by(a,b) %>% 
  summarise(c = length(.)) %>% 
  ungroup %>%
  complete(a,b, fill = list(c = 0))