从data.table中使用rowids提取范围

从data.table中使用rowids提取范围,r,data.table,R,Data.table,在下面的示例中,我想使用sel.dt中的列作为开始和结束,从data.dt中提取行。因此,我想创建一个datatable,其中包含data.dt中的以下行:(11、12、8、9、10、11、12、13、14、58、59等) require(data.table) N是否要按选择范围对其进行分组?如果没有,基本解决方案仍然有效:data.dt[with(sel.dt,unlist(Map(seq,from=i,to=j)),]Btw,在创建随机示例之前,您应该使用set.seed,这样我们就可以看

在下面的示例中,我想使用
sel.dt
中的列作为开始和结束,从
data.dt
中提取行。因此,我想创建一个datatable,其中包含
data.dt
中的以下行:
(11、12、8、9、10、11、12、13、14、58、59等)

require(data.table)

N是否要按选择范围对其进行分组?如果没有,基本解决方案仍然有效:
data.dt[with(sel.dt,unlist(Map(seq,from=i,to=j)),]
Btw,在创建随机示例之前,您应该使用set.seed,这样我们就可以看到相同的东西了。想知道是否有一种
data.table
方法,比如
sel.dt[,list(x=seq.int(i,j,1L))]
可以获得行索引列表。该语句返回时出现错误
“from”的长度必须为1
。该错误解释了问题所在,对吗?您可以按行执行,
sel.dt[,list(x=seq.int(i,j,1L)),by=1:nrow(sel.dt)]
这样
i
j
都是长度1。或者将Frank的
i
代码复制到
j
如下:
sel.dt,unlist(Map(seq,from=i,to=j))
提示:尝试
non/code>join。这是最新的data.table方法。
require(data.table)

N <- 10000
data.dt <- data.table(id=sample(1:100, N, replace=TRUE), cost=runif(N,100,200))
sel.dt <- data.table(i=sample(5:60,10,replace=TRUE))[, j:=i+sample(1:10,10,replace=TRUE)]

> data.dt
       id     cost
    1: 24 114.2434
    2: 14 104.7751
    3: 99 103.2048
    4: 49 187.9645
    ..............

> sel.dt
     i  j
 1: 11 12
 2:  8 14
 3: 58 59
 ........