我目前的数据集如下:
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函数,但这会很慢。任何建议将不胜感激!谢谢!
答案 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
请注意,.N
是data.table
包中的保留字,是组中的行数,由by=
参数分段。