每 3 行求和

vic*_*cky 0 aggregate r dataframe

我想对前 3 行的数量求和,然后对后 3 行的数量求和,依此类推。基本上,每 3 行求和。

在此处输入图片说明

下面是一个可重现的代码:

id <- 1:15
numbers <- 6:20
df <- data.frame(id, numbers)
Run Code Online (Sandbox Code Playgroud)

请帮忙,谢谢!在我的真实数据中,我需要每 550 行求和。

akr*_*run 5

我们可以创建一个分组变量,gl然后得到sum

library(dplyr)
library(stringr)
n1 <- 3 # change to 550
df %>%
   group_by(grp = as.integer(gl(n(), n1, n()))) %>%
   summarise(range = str_c(first(id), last(id), sep=" -- "), sum = sum(numbers)) %>%
   select(-grp)
# A tibble: 5 x 2
#  range      sum
#  <chr>    <int>
#1 1 -- 3      21
#2 4 -- 6      30
#3 7 -- 9      39
#4 10 -- 12    48
#5 13 -- 15    57
Run Code Online (Sandbox Code Playgroud)


Big*_*ger 5

基础 R 中的解决方案:

grp = (1:nrow(df) - 1)%/%3
data.frame(
    range = aggregate(df$id, list(grp),
                      function(x) paste(range(x), collapse=" -- "))$x,
    sum = aggregate(df$numbers, list(grp), sum)$x,
    stringsAsFactors = FALSE)

##      range sum
## 1   1 -- 3  21
## 2   4 -- 6  30
## 3   7 -- 9  39
## 4 10 -- 12  48
## 5 13 -- 15  57
Run Code Online (Sandbox Code Playgroud)