我可以使用以下内容将data.frame
与dplyr
进行简单的聚合:
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
。
例如,假设典型数据集应该有5个组。
z$b <- factor(z$b, levels = letters[1:5])
但显然在这个特定的中没有任何东西,但可能在另一个中。如何汇总此数据,以便length
factors
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
。
期望的输出:
/^\w\s$/
答案 0 :(得分:2)
解决此问题的一种方法是使用“tidyr”中的complete
。您必须先使用mutate
来计算列“b”:
library(dplyr)
library(tidyr)
z %>%
mutate(b = factor(b, letters[1:5])) %>%
group_by(b) %>%
summarise(out = n()) %>%
complete(b, fill = list(out = 0))
# Source: local data frame [5 x 2]
#
# b out
# (fctr) (dbl)
# 1 a 5
# 2 b 5
# 3 c 5
# 4 d 5
# 5 e 0
答案 1 :(得分:1)
解决方法是加入包含所有级别的表:
z <- full_join(z, data.frame(b=levels(z$b))
这会将分析变量的所有缺失行设置为NA,这在一般情况下比将它们设置为零更有意义。如有必要,您可以使用z[is.na(z)] <- 0
将其更改为零。
答案 2 :(得分:0)
您可以使用xtabs:
xtabs(a ~ b, z)
这会聚合z $ b而不是像你的例子那样只计算z $ a中的等级,但这可以通过表格轻松实现:
table(z$a)