我有一个较大的数据框,其中包含多列和数千行。我想通过每五行数据框架从前导行中减去前一行的值来替换每个前导行的值。例如,第一个值应保留其值,第二行应为: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
一个选项是创建一个分组变量,然后使用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