【发布时间】:2018-01-10 12:18:13
【问题描述】:
我希望通过更改列z 的索引并同时根据一些基于%in% 的向量过滤行来递归地对数据表进行子集化。
dt <- setDT(copy(diamonds))
dt <- setDT(data.frame(lapply(dt, as.character), stringsAsFactors=FALSE))
z=4
subset_by <- unique(dt[,z])[1:2]
### obviously does not work
###dt1<-dt[ z %in% subset_by]
我正在寻找最节省内存的操作来执行此操作,并且我确信有一种方法可以不使用 colnames,但我就是找不到。我看了很多帖子,this 是最相关的
【问题讨论】:
-
您的数据集在第 2 行转换为 data.frame 后不再是
data.table。你需要dt[z %in% subset_by,] -
抱歉,已修复。这就是我尝试创建可重现的示例时得到的结果!
-
转换为data.table后,子集列的方式应该是
unique(dt[[z]])[1:2] -
谢谢,我不想简单地选择前 2 行(或任意数量)。我想使用
%in运算符根据某些值进行子集化 -
之后就可以使用
i1 <- dt[, .I[.SD[[1]] %in% subset_by],.SDcols = z] ; dt[i1]
标签: r data.table