真的很沮丧。我只想区分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
答案 0 :(得分: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
答案 1 :(得分:2)
试试这个:
dt[,dif := rollapplyr(value, 2, function(x){diff(x,lag = 1)},na.pad=TRUE), by = list(variable)]
> dt
variable value dif
1: xyz 3 NA
2: xyz 7 4
3: xyz 5 -2
4: abc 9 NA
5: abc 10 1
6: abc 2 -8