滚动行减法

use*_*829 1 row r subtraction

我正在寻找执行行减法,其中我有一组个人,我想从它上面的行中减去最近的行(如滚动行减法)。有谁知道一个简单的方法来做到这一点?

数据看起来像这样:

    Name Day variable.1
1   Bob   1       43.4
2   Bob   2       32.0
3   Bob   3       18.1
4   Bob   4       41.2
5   Bob   5       85.2
6  Jeff   1       17.4
7  Jeff   2       55.6
8  Jeff   3       58.7
9  Jeff   4       40.6
10 Jeff   5       77.3
11 Carl   1       52.9
12 Carl   2       71.7
13 Carl   3       84.3
14 Carl   4       54.8
15 Carl   5       69.7
Run Code Online (Sandbox Code Playgroud)

例如,对于 Bob,我希望它显示为:

    Name Day variable.1
1   Bob   1       NA
2   Bob   2       -11.4
3   Bob   3       -13.9
4   Bob   4       23.1
5   Bob   5       44
Run Code Online (Sandbox Code Playgroud)

然后它会转到下一个名称并执行相同的任务。

akr*_*run 5

你可以试试

library(data.table)#v1.9.5+
setDT(df1)[,variable.1:=c(NA,diff(variable.1)) , Name]
Run Code Online (Sandbox Code Playgroud)

或者使用(如@Jan Gorecki 所建议的)shift的开发版本data.table。安装说明是here

setDT(df1)[, variable.1 := variable.1- shift(variable.1), Name]
Run Code Online (Sandbox Code Playgroud)