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
.