不使用< - 的子集数据表

时间:2015-10-01 08:22:54

标签: r data.table subset

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

# 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,]

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

这是对的吗? 是否可以在没有<-

的情况下更新过滤后的数据

1 个答案:

答案 0 :(得分:9)

您要问的是按引用删除行

目前还不可能,但有#635的FR。

在此之前,您需要复制(内存中)data.table子集,当与子集(<- arg组合时,副本由=(或i)完成)所以现在你无法避免这种情况。

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

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

顺便说一句。在对data.table进行子集化时,您不需要使用dt[x==1,]这样的中间逗号,您可以使用dt[x==1]