Proper-Idiom für das Hinzufügen von Zeilen mit Nullen in tidyr / dplyr

Angenommen, ich habe einige Zähldaten, die wie folgt aussehen:

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

Ich möchte wie folgt aufräumen und zusammenfassen:

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

Ich weiß, dass fürx=="B" undy=="ii" Wir haben den Wert Null und nicht einen fehlenden Wert festgestellt. der Außendienstmitarbeiter war tatsächlich dort, aber da es keine positive Zählung gab, wurde keine Zeile in die Rohdaten eingegeben. Ich kann die Nullzählung explizit hinzufügen, indem ich dies tue:

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

Aber das scheint ein bisschen ein Umweg zu sein. Ist ihr eine sauberere Redewendung dafür?

Nur um zu verdeutlichen: Mein Code macht bereits, was ich brauche, mitspread danngather, also was mich interessiert, ist eine direktere Route zu findeninnerhal tidyr unddplyr.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage