3

我有以下示例数据框。

id value
a  3
a  4
a  8
b  9
b  8

我想对其进行转换,以便可以计算连续行之间“值”列的差异。所以预期的结果是

id value prevValue
a   3     0
a   4     3
a   8     4
b   9     0
b   8     9

请注意,在每个组中,我希望值序列以 0 开头,而连续值来自前一个值。我尝试了以下

x = x[,list(
prevValue = c(0,value[1:(.N-1)])
),by=id]

但没有运气。提前致谢。

4

2 回答 2

8

使用负索引,例如:

x[,prev.value := c(0,value[-.N]) ,by=id]
于 2013-08-15T03:55:46.360 回答
0

没有data.table

with(dat,ave(value,id,FUN=function(x) c(0,head(x,-1))))
[1] 0 3 4 0 9
于 2013-08-15T06:07:57.747 回答