我正在寻找执行行减法,其中我有一组个人,我想从它上面的行中减去最近的行(如滚动行减法)。有谁知道一个简单的方法来做到这一点?
数据看起来像这样:
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)
然后它会转到下一个名称并执行相同的任务。
你可以试试
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)