我想要对数据表的某些行进行子集化。像这样:
# 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,]
但是,我正在处理一个庞大的数据集,我想避免使用<-
,这不是内存效率,因为它会复制数据。
这是对的吗?
是否可以在没有<-
?
答案 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]
。