Правильная идиома для добавления строк с нулевым счетом в tidyr / dplyr

Предположим, у меня есть данные подсчета, которые выглядят так:

library(tidyr)
library(dplyr)

X.raw <- data.frame(
    x = as.factor(c("A", "A", "A", "B", "B", "B")),
    y = as.factor(c("i", "ii", "ii", "i", "i", "i")),
    z = 1:6)
X.raw
#   x  y z
# 1 A  i 1
# 2 A ii 2
# 3 A ii 3
# 4 B  i 4
# 5 B  i 5
# 6 B  i 6

Я хотел бы привести в порядок и резюмировать так:

X.tidy <- X.raw %>% group_by(x,y) %>% summarise(count=sum(z))
X.tidy
# Source: local data frame [3 x 3]
# Groups: x
#
#   x  y count
# 1 A  i     1
# 2 A ii     5
# 3 B  i    15

Я знаю что дляx=="B" а такжеy=="ii" мы наблюдали количество отсчетов, а не пропущенное значение. то есть полевой работник действительно был там, но из-за отсутствия положительного счета в исходные данные не было введено ни одной строки. Я могу добавить нулевой счет явно, выполнив это:

X.fill <- X.tidy %>% spread(y, count, fill=0) %>% gather(y, count, -x)
X.fill
# Source: local data frame [4 x 3]
# 
#   x  y count
# 1 A  i     1
# 2 B  i    15
# 3 A ii     5
# 4 B ii     0

Но это кажется немного окольным способом делать вещи. Это более чистая идиома для этого?

Просто чтобы уточнить: мой код уже делает то, что мне нужно, используяspread затемgatherтак что меня интересует поиск более прямого маршрутав tidyr а такжеdplyr.

Ответы на вопрос(5)

Ваш ответ на вопрос