R 使用data.table从起点和增量创建序列

R 使用data.table从起点和增量创建序列,r,data.table,sequence,cumulative-sum,R,Data.table,Sequence,Cumulative Sum,我想使用data.table向起点重复添加增量 library(data.table) dat <- data.table(time=seq(from=as.POSIXct("2018-01-01 01:00:01"),to=as.POSIXct("2018-01-01 01:00:10"), by="secs"), int=c(2,3,3,1,10,10,10,10,10,10), x=2*1:10) > dat time inc x 1:

我想使用data.table向起点重复添加增量

library(data.table)
dat <- data.table(time=seq(from=as.POSIXct("2018-01-01 01:00:01"),to=as.POSIXct("2018-01-01 01:00:10"), by="secs"), int=c(2,3,3,1,10,10,10,10,10,10), x=2*1:10)

> dat
                  time inc  x
 1: 2018-01-01 01:00:01   2  2
 2: 2018-01-01 01:00:02   3  4
 3: 2018-01-01 01:00:03   3  6
 4: 2018-01-01 01:00:04   1  8
 5: 2018-01-01 01:00:05  10 10
 6: 2018-01-01 01:00:06  10 12
 7: 2018-01-01 01:00:07  10 14
 8: 2018-01-01 01:00:08  10 16
 9: 2018-01-01 01:00:09  10 18
10: 2018-01-01 01:00:10  10 20
我可能知道如何在循环中执行此操作,但我想知道data.table是否也能处理此类问题

由于
time
中的值是连续的,因此我的想法是使用
inc
的累积值来索引,沿着

index <- dat[...,cumsum(...inc...),...]
dat[index]
索引
#从查找下一次开始
dat[,next.time:=time+int][!dat,on=(next.time=time),next.time:=NA]
#在实际问题的循环中执行此操作,并在最后一列全部为NA时停止
dat[dat,on=(next.time=time),t1:=i.next.time]
dat[dat,on=(t1=时间),t2:=i.next.time]
dat
#时间int x下一次时间t1 t2
# 1: 2018-01-01 01:00:01   2  2 2018-01-01 01:00:03 2018-01-01 01:00:06 
# 2: 2018-01-01 01:00:02   3  4 2018-01-01 01:00:05                 
# 3: 2018-01-01 01:00:03   3  6 2018-01-01 01:00:06                 
# 4: 2018-01-01 01:00:04   1  8 2018-01-01 01:00:05                 
# 5: 2018-01-01 01:00:05  10 10                                 
# 6: 2018-01-01 01:00:06  10 12                                 
# 7: 2018-01-01 01:00:07  10 14                                 
# 8: 2018-01-01 01:00:08  10 16                                 
# 9: 2018-01-01 01:00:09  10 18                                 
#10: 2018-01-01 01:00:10  10 20                                 

您可能需要指定
i
来对行进行子集设置。为了更好地理解问题,最好在帖子中展示你的方法。这与@bumblebee不一样吗?如果是重复的帖子,请删除其中一篇。发帖的时间都在一天之内,老帖子有更多关于计算的信息。是的,这是一样的,因为我觉得我有更好的方法来解释这个问题。有时我发现很难描述问题并用不同的描述发布它。然后我删除了旧的。@akrun我现在指定了我的方法,它认为
I
部分正是我问题的关键。
index <- dat[...,cumsum(...inc...),...]
dat[index]
# start with finding the next time
dat[, next.time := time + int][!dat, on = .(next.time = time), next.time := NA]

# do this in a loop for the actual problem, and stop when final column is all NA
dat[dat, on = .(next.time = time), t1 := i.next.time]
dat[dat, on = .(t1 = time), t2 := i.next.time]

dat
#                   time int  x           next.time                  t1   t2
# 1: 2018-01-01 01:00:01   2  2 2018-01-01 01:00:03 2018-01-01 01:00:06 <NA>
# 2: 2018-01-01 01:00:02   3  4 2018-01-01 01:00:05                <NA> <NA>
# 3: 2018-01-01 01:00:03   3  6 2018-01-01 01:00:06                <NA> <NA>
# 4: 2018-01-01 01:00:04   1  8 2018-01-01 01:00:05                <NA> <NA>
# 5: 2018-01-01 01:00:05  10 10                <NA>                <NA> <NA>
# 6: 2018-01-01 01:00:06  10 12                <NA>                <NA> <NA>
# 7: 2018-01-01 01:00:07  10 14                <NA>                <NA> <NA>
# 8: 2018-01-01 01:00:08  10 16                <NA>                <NA> <NA>
# 9: 2018-01-01 01:00:09  10 18                <NA>                <NA> <NA>
#10: 2018-01-01 01:00:10  10 20                <NA>                <NA> <NA>