[英]Print levels of a factor present within select criteria rather than all levels of the factor in R?
[英]R: aggregate by all factor levels (present and not present)
我可以使用以下內容簡單地使用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
。
例如,假設典型數據集應該有5個組。
z$b <- factor(z$b, levels = letters[1:5])
但顯然沒有任何特別的東西,但可能在另一個。 如何聚合此數據,以便缺失factors
的length
為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
接近這一點的一種方法是使用complete
從“tidyr”。 您必須首先使用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
解決方法是使用包含所有級別的表進行連接:
z <- full_join(z, data.frame(b=levels(z$b))
這會將分析變量的所有缺失行設置為NA,這在一般情況下比將它們設置為零更有意義。 如果需要,您可以使用z[is.na(z)] <- 0
將它們更改為零。
你可以使用xtabs:
xtabs(a ~ b, z)
這會聚合z $ b,而不僅僅是計算z $ a中的級別,但是這可以通過表格輕松實現:
table(z$a)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.