簡體   English   中英

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])

但顯然沒有任何特別的東西,但可能在另一個。 如何聚合此數據,以便缺失factorslength0

期望的輸出:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM