我目前有一个数据集,如下所示:
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 列,它本质上是时间的滞后,但它是由 Person 列完成的。因此,某人的最后一个条目将是该人的重复。
我想知道 data.table 包中是否有一个实现。我显然可以使用 apply 函数,但这会很慢。任何建议将不胜感激!谢谢!
最佳答案
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= 分段
参数。
关于r - 如何使用 data.table 包通过另一个排序列创建日期列的时间滞后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26050576/