R:所有因素水平的总和(存在和不存在)

R:所有因素水平的总和(存在和不存在),r,aggregate,dplyr,R,Aggregate,Dplyr,我可以使用dplyr将data.frame简单地聚合为以下内容: z <- data.frame(a = rnorm(20), b = rep(letters[1:4], each = 5)) library(dplyr) z %>% group_by(b) %>% summarise(out = n()) Source: local data frame [4 x 2] b out (fctr) (int) 1 a 5

我可以使用
dplyr
data.frame
简单地聚合为以下内容:

z <- data.frame(a = rnorm(20), b = rep(letters[1:4], each = 5))

library(dplyr)

z %>%
  group_by(b) %>%
  summarise(out = n())

Source: local data frame [4 x 2]

       b   out
  (fctr) (int)
1      a     5
2      b     5
3      c     5
4      d     5
但是很明显,在这个特定的中没有任何内容,但在另一个中可能有。如何聚合此数据,使缺少的
因子的
长度
0

期望输出:

Source: local data frame [4 x 2]

       b   out
  (fctr) (int)
1      a     5
2      b     5
3      c     5
4      d     5
5      e     0

解决方法是连接包含所有级别的表:

z <- full_join(z, data.frame(b=levels(z$b))

z一种方法是使用“tidyr”中的
complete
。您必须首先使用
mutate
来计算列“b”的系数:

您可以使用xtabs:

xtabs(a ~ b, z)
这将聚合z$b,而不是像您的示例中那样仅计算z$a中的级别,但这很容易通过表实现:

table(z$a)

您可以像这样使用
tapply
tapply(z$b,z$b,length)
我认为这是一个很好的例子。
xtabs(a ~ b, z)
table(z$a)