data.table列上的diff

use*_*769 4 diff r rollapply data.table

真的很沮丧.我只想区分data.table中的行.其中dif(n)=值(n) - 值(n-1).所以,与我的相比,结果应该移动1个位置,每个"变量"的第一个位置应该是NA.即dif应为(NA,4,-2,NA,1,-8).每个"变量的第一个值应该是NA,因为没有位置n-1.任何想法如何修改函数来实现这个?我真的想知道如何为了我自己的理解而使用rollapplyr来做这个.

谢谢.

data.table:

> dt
       variable value
    1:      xyz     3
    2:      xyz     7
    3:      xyz     5
    4:      abc     9
    5:      abc    10
    6:      abc     2
> dt[,dif := rollapplyr(value, 2, function(x){r <- diff(x,lag = 1)}, align = "right"), by = list(variable)]

> dt
   variable value dif
1:      xyz     3   4
2:      xyz     7  -2
3:      xyz     5   4
4:      abc     9   1
5:      abc    10  -8
6:      abc     2   1
Run Code Online (Sandbox Code Playgroud)

mto*_*oto 13

我们可以使用shift():

dt[,diff := value - shift(value), by = variable]
> dt
   variable value diff
1:      xyz     3   NA
2:      xyz     7    4
3:      xyz     5   -2
4:      abc     9   NA
5:      abc    10    1
6:      abc     2   -8
Run Code Online (Sandbox Code Playgroud)