考虑到诸如经典 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/