首页 > 解决方案 > 如何在 dplyr 中按固定数量的行分组?

问题描述

我有一个数据框:

set.seed(123)
x <- sample(10)
y <- x^2
my.df <- data.frame(x, y)

结果是这样的:

> my.df
    x   y
1   3   9
2   8  64
3   4  16
4   7  49
5   6  36
6   1   1
7  10 100
8   9  81
9   2   4
10  5  25

我想要的是按每n行对行进行分组,以计算 5 个选定行的平均值、总和或其他值。对于n=5是这样的:

my.df %>% group_by(5) %>% summarise(sum = sum(y), mean = mean(y))

预期的输出将类似于:

# A tibble: 1 x 2
     sum   mean
   <dbl>  <dbl>
1    174   34.8
2    211   42.2

当然,数据框中的行数可以是 15、20、100 等等。我仍然想每n行对数据进行分组。

我怎样才能做到这一点?

标签: rdplyr

解决方案


我们可以使用reporgl来创建分组变量

library(dplyr)
my.df %>% 
    group_by(grp = as.integer(gl(n(), 5, n()))) %>% 
    #or with rep
    # group_by(grp = rep(row_number(), length.out = n(), each = 5)) 
    summarise(sum = sum(y), mean = mean(y))
# A tibble: 2 x 3
#    grp   sum  mean
#  <int> <dbl> <dbl>
#1     1   174  34.8
#2     2   211  42.2

推荐阅读