不使用< - 的子集数据表

raf*_*ira 12 r subset data.table

我想要对数据表的某些行进行子集化.像这样:

# load data
  data("mtcars")

# convert to data table
  setDT(mtcars,keep.rownames = T)

# Subset data
  mtcars <- mtcars[like(rn,"Mer"),] # or
  mtcars <- mtcars[mpg > 20,]
Run Code Online (Sandbox Code Playgroud)

但是,我正在处理一个庞大的数据集,我想避免使用<-,这不是内存效率,因为它会复制数据.

它是否正确?是否可以在没有更新过滤后的数据<-

jan*_*cki 9

你要问的是通过引用删除行.

现在还不可能,但#635有FR .

在此之前,您需要复制(内存中)您的data.table子集,复制由<-(或=)与子集(iarg)组合完成,因此现在您无法避免这种情况.

如果它可以帮助您以某种方式操作语言对象来预定义操作并延迟它的评估,也可以多次重用预定义对象:

mtcars_sub <- quote(mtcars[like(rn,"Mer")])
mtcars_sub2 <- quote(eval(mtcars_sub)[mpg > 20])
eval(mtcars_sub2)
#           rn  mpg cyl  disp hp drat   wt qsec vs am gear carb
# 1: Merc 240D 24.4   4 146.7 62 3.69 3.19 20.0  1  0    4    2
# 2:  Merc 230 22.8   4 140.8 95 3.92 3.15 22.9  1  0    4    2
Run Code Online (Sandbox Code Playgroud)

BTW.在对data.table进行子集化时,您不需要使用像dt[x==1,]您可以使用的中间逗号dt[x==1].