汇总所有因素组合的观测数据 [英] Summarize data with observations for all combinations of factors

查看:8
本文介绍了汇总所有因素组合的观测数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有时需要一个完整的数据框架,其中包含分组因素的所有组合的观察结果,即使原始数据中没有这些组合(即用NA数据填充这些空白)。

考虑使用mtcars的以下示例:

mtcars %>% group_by(cyl, gear) %>% dplyr::summarise(N = n())
# A tibble: 8 x 3
# Groups:   cyl [3]
    cyl  gear     N
  <dbl> <dbl> <int>
1     4     3     1
2     4     4     8
3     4     5     2
4     6     3     2
5     6     4     4
6     6     5     1
7     8     3    12
8     8     5     2

cylgear分组时,缺少cyl=8gear=4的观测。有没有可能以一种简单的方式(希望是基于整齐的方式)获得这个汇总表,其中包括一行对缺失的因素组合的NA观察?例如,所需的输出将为:

# A tibble: 9 x 3
# Groups:   cyl [3]
    cyl  gear     N
  <dbl> <dbl> <int>
1     4     3     1
2     4     4     8
3     4     5     2
4     6     3     2
5     6     4     4
6     6     5     1
7     8     3    12
8     8     4    NA
9     8     5     2

推荐答案

complete删除组属性后可以使用ungroup

library(dplyr)
library(tidyr)
mtcars %>% 
    group_by(cyl, gear) %>%
    dplyr::summarise(N = n()) %>%
    ungroup %>%
    complete(cyl, gear)
# A tibble: 9 x 3
#    cyl  gear     N
#  <dbl> <dbl> <int>
#1     4     3     1
#2     4     4     8
#3     4     5     2
#4     6     3     2
#5     6     4     4
#6     6     5     1
#7     8     3    12
#8     8     4    NA
#9     8     5     2

或者另一个选项是创建一个具有列的唯一元素的组合数据集,然后执行left_join(不像前一个那样简单)

crossing(cyl = unique(mtcars$cyl), gear = unique(mtcars$gear)) %>% 
    left_join(mtcars %>% 
                  group_by(cyl, gear) %>%
                  dplyr::summarise(N = n()))

这篇关于汇总所有因素组合的观测数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆