r - 如何使用 data.table 包通过另一个排序列创建日期列的时间滞后?

标签 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 列,它本质上是时间的滞后,但它是由 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

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

关于r - 如何使用 data.table 包通过另一个排序列创建日期列的时间滞后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26050576/

相关文章:

r - 在包函数中使用 data.table 失败

r - Tidyr 使用正则表达式分开

用字符串中的平均值替换范围

r - 如何在R中计算前几年的运行总计?

r - 如何[join on] [where] in r data.tables

r - fill=TRUE 的简单 fread 操作失败

r - 如何在巨大的数据框中用零替换 NaN 值?

r - 在 R 中的不同 Y 轴上向条形图添加线条

r - 尝试使用 R 过滤前 10 个条目?

r - 在数字数据的字符串中嵌入 nul