如何使用data.table包创建另一个已排序列的日期列的时间延迟?

时间:2014-09-26 01:13:54

标签: r data.table

我目前的数据集如下:

data.table(Person=rep(LETTERS[1:3],c(3,4,3)),Time=c(3,5,10,1,3,6,15,2,5,9))

Person    Time
A            3
A            5    
A            10
B            1
B            3
B            6
B            15
C            2
C            5
C            9

每个人都有相应的时间。有没有办法可以创建如下数据集:

Person    Time    Previous
A            3           5            
A            5           10    
A            10          10
B            1           3
B            3           6
B            6           15
B            15          15
C            2           5
C            5           9
C            9           5
D            5           5

这里,数据集包含一个Previous列,它基本上是Time的延迟,但它由Person列完成。因此,某个人的最后一个条目将是该人重复。

我想知道data.table包中是否有这样的实现。我显然可以使用apply函数,但这会很慢。任何建议将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:2)

R> DT[, Previous := c(Time[-1], Time[.N]), by=Person]
R> DT
    Person Time Previous
 1:      A    3        5
 2:      A    5       10
 3:      A   10       10
 4:      B    1        3
 5:      B    3        6
 6:      B    6       15
 7:      B   15       15
 8:      C    2        5
 9:      C    5        9
10:      C    9        9

请注意,.Ndata.table包中的保留字,是组中的行数,由by=参数分段。