r - 计算不同因素组合的行数

标签 r dplyr

考虑到诸如经典 mtcars 之类的数据集,我想知道不同级别因素的观察值(=行)的数量,将它们分开以及放在一起。

例如,以下代码将生成一个 N 列,其中包含每级圆柱和齿轮的观察次数,而不是分别针对圆柱和齿轮的观察次数。

mtcars %>% dplyr::group_by(cyl, gear) %>% dplyr::summarise(N = n()) 

我知道可以通过类似的方式获得单独数量的 cyl 和 gear 观察值,创建单独的数据框,然后将它们合并在一起。以下将生成预期的输出:

df <- mtcars %>% dplyr::group_by(cyl, gear) %>% dplyr::summarise(N = n())
df_gear <- mtcars %>% dplyr::group_by(gear) %>% dplyr::summarise(Ngear = n())
df_cyl <- mtcars %>% dplyr::group_by(cyl) %>% dplyr::summarise(Ncyl = n())
df %>% dplyr::left_join(df_cyl) %>% dplyr::left_join(df_gear)

但我想知道是否有更简洁的方法来生成此数据集,希望不需要生成中间数据集。

最佳答案

这里有一种方法可以解决这个问题,它依赖于 mutate()ave() 而不是 group_by()summarise() 为了紧凑:

library(dplyr)

mtcars %>% 
  mutate(n = ave(cyl, cyl, gear, FUN = length),
         n_cyl = ave(cyl, cyl, FUN = length),
         n_gear = ave(gear, gear, FUN = length)) %>%
  select(gear, cyl, n, n_cyl, n_gear) %>%
  distinct()

  gear cyl  n n_cyl n_gear
1    4   6  4     7     12
2    4   4  8    11     12
3    3   6  2     7     15
4    3   8 12    14     15
5    3   4  1    11     15
6    5   4  2    11      5
7    5   8  2    14      5
8    5   6  1     7      5

关于r - 计算不同因素组合的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60003545/

相关文章:

R mutate & gsub 其中模式基于列

r - 查找 dplyr 中当前变异变量的最大值

r - 使用管道在列表中的单个列上应用 dplyr 函数

r - 使用 ggplot2 绘制多条曲线

r - 在 Shiny 的应用程序中使用 if else 的条件值,使用 tidyverse 和 dplyr 来分组和过滤数据集

r - dplyr date as.numeric 奇怪的行为

r - 如何按年份和绘图从一列中查找多个 ID 的频率?

r - 数组: subtract by row

r - 不小心重写了 R 基础包中的函数,如何恢复默认值?

r - 如何在 NetLogo 6.0 中设置 R 扩展 - Windows