我想对数据表的某些行进行子集化。像这样:
# 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,]
但是,我正在使用庞大的数据集,所以我想避免使用<-
,因为它会复制数据,所以使用内存效率不高。
这样对吗?是否可以不使用更新过滤数据<-
?
您要问的是按引用删除行。
尚不可能,但是#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]
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句