假设我有一些计数数据,看起来像这样:
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
内寻找更直接的路线。
0
和NA
? - A5C1D2H2I1M1N2O1R2T1NA
。 - pete