Предположим, что у меня есть некоторые данные count, которые выглядят так:
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
then gather
, поэтому меня интересует поиск более прямого маршрута внутри tidyr
и dplyr
.