对一列中的每四行求和

Sum each four rows in a column

我是 R 的初学者,我真的需要你的帮助。我正在尝试获取一个新的数据框,用于存储我的列中每五行的总和。

例如,我有一个包含两列 (A,B) 的数据框 (delta)

A B   
2 3   
1 2  
3 2  
4 5  
3 7  
5 6  
2 5  

我正在寻找的输出是

AA BB  
13 19  
16 22  
17 25  

哪里

13 = row1+row2+row3+row4+row5
16 = row2+row3+row4+row5+row6 

等等...

我不知道从哪里开始。非常感谢你们的帮助。

主题指的是 4 行,但问题中的示例指的是 5 行。我们在下面使用了 5,但如果您想要 4,只需在代码中将 5 替换为 4。

1) rollsum 在末尾使用注释中的可重现输入 rollsum 。如果矩阵可以作为输出,则省略 as.data.frame。

library(zoo)

as.data.frame(rollsum(DF, 5))
##    A  B
## 1 13 19
## 2 16 22
## 3 17 25

2) filter 基础 R 中的过滤器也有效。请注意,如果您加载了 dplyr,它会破坏过滤器,因此在这种情况下,请使用 stats::filter 代替过滤器,以确保您获得正确的版本。

setNames(as.data.frame(na.omit(filter(DF, rep(1, 5)))), names(DF))
##    A  B
## 1 13 19
## 2 16 22
## 3 17 25

备注

Lines <- "
A B
2 3
1 2
3 2
4 5
3 7
5 6
2 5"
DF <- read.table(text = Lines, header = TRUE)

这是一个使用 frollsumdata.table 选项,例如

> na.omit(setDT(df)[,lapply(.SD,frollsum,5)])
    A  B
1: 13 19
2: 16 22
3: 17 25

> na.omit(setDT(df)[,setNames(frollsum(.SD,5),names(.SD))])
    A  B
1: 13 19
2: 16 22
3: 17 25