如何从前导行的前几行减去R中的每五行?

问题描述 投票:0回答:1

我有一个较大的数据框,其中包含多列和数千行。我想通过每五行数据框架从前导行中减去前一行的值来替换每个前导行的值。例如,第一个值应保留其值,第二行应为:second row - first row。同样,第六行应保留其值,但是第七行将为seventh row - sixth row。这是一个示例数据帧

DF = data.frame(A= c(1:11), B = c(11:21))

输出结果应如下所示

> Output
    A  B
1   1 11
2   1  1
3   1  1
4   1  1
5   1  1
6   6 16
7   1  1
8   1  1
9   1  1
10  1  1
11 11 21
r dataframe aggregate subtraction tapply
1个回答
1
投票

一个选项是创建一个分组变量,然后使用diff进行转换

library(dplyr)
DF %>% 
   group_by(grp = as.integer(gl(n(), 5, n()))) %>% 
   mutate_all(~c(first(.), diff(.))) %>%
   ungroup %>%
   select(-grp)
# A tibble: 11 x 2
#       A     B
#   <int> <int>
# 1     1    11
# 2     1     1
# 3     1     1
# 4     1     1
# 5     1     1
# 6     6    16
# 7     1     1
# 8     1     1
# 9     1     1
#10     1     1
#11    11    21
© www.soinside.com 2019 - 2024. All rights reserved.