我有一个 df:
df <- data.frame(x = c(1,2,3,4,5,6,7,8,9,10,11,12,13),
y = c(0,0,2,0,1,0,0,0,0,3,0,4,0))
我正在寻找精确时刻(时刻 4 之后)每 4 行的总和 这应该是输出:
x y z
1 0 0
2 0 0
3 2 0
4 0 2
5 1 0
6 0 0
7 0 0
8 0 1
9 0 0
10 3 0
11 0 0
12 4 7
13 0 0
使用 dplyr,我能够创建具有以下结果的以下代码。
a <- df %>%
dplyr::mutate(b = gl(ceiling(nrow(x)/4), 4, nrow(x))) %>%
dplyr::group_by(b) %>%
dplyr::mutate(sum = sum(amount))
x y z
1 0 2
2 0 2
3 2 2
4 0 2
5 1 1
6 0 1
7 0 1
8 0 1
9 0 7
10 3 7
11 0 7
12 4 7
13 0 0
但我无法删除数字并将它们替换为 0,除了第 4 行,但问题是如果我有一段 0,它会重复。
最佳答案
这可以通过 zoo
包中的 rollapply
轻松实现,即
library(zoo)
rollapply(df$y, 4, by = 4, sum, fill = 0, align = 'right')
#[1] 0 0 0 2 0 0 0 1 0 0 0 7 0
关于r - df R 中每 x 行的总和,仅在第 n 行输出。 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44827097/