从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
........