data.table如何获取keyby以包括所有因素组合?

时间:2018-08-15 06:25:34

标签: r group-by data.table

我有一个data.table,我想计算ab每种组合的出现:

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

它忽略了a==2 & b=="b"的情况,该情况在dt1中为零,但我希望将其包括在内,因此结果看起来像:

#    a b c
# 1: 1 a 2
# 2: 1 b 2
# 3: 2 a 4
# 4: 2 b 0
# 5: 3 a 1
# 6: 3 b 3

使用循环或apply系列的最直观的方法,但是对于我的大型数据集而言,效率低下。有想法吗?

1 个答案:

答案 0 :(得分:2)

这是一种泰迪/ dplyr方法:

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