子集数据表,不使用<-

拉法佩雷拉

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

# 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章