不使用 <- 的子集数据 table
Subset data table without using <-
我想对数据 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,]
但是,我正在处理一个庞大的数据集,我想避免使用 <-
,因为它会复制数据,所以内存效率不高。
这是正确的吗?
是否可以在没有 <-
的情况下更新过滤后的数据?
您要问的是通过引用删除行。
目前还不可能,但是有 FR #635。
在那之前你需要复制(在内存中)你的 data.table 子集,当与子集 (i
arg) 所以现在你无法避免。
如果它以某种方式有所帮助,您可以对语言对象进行操作以预定义操作并延迟其评估,也可以多次重复使用预定义对象:
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]
.
我想对数据 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,]
但是,我正在处理一个庞大的数据集,我想避免使用 <-
,因为它会复制数据,所以内存效率不高。
这是正确的吗?
是否可以在没有 <-
的情况下更新过滤后的数据?
您要问的是通过引用删除行。
目前还不可能,但是有 FR #635。
在那之前你需要复制(在内存中)你的 data.table 子集,当与子集 (i
arg) 所以现在你无法避免。
如果它以某种方式有所帮助,您可以对语言对象进行操作以预定义操作并延迟其评估,也可以多次重复使用预定义对象:
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]
.