gpt4 book ai didi

r - 不使用<-的子集数据表

转载 作者:行者123 更新时间:2023-12-04 01:05:26 24 4
gpt4 key购买 nike

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

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

关于r - 不使用<-的子集数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32882768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com