【问题标题】:subset data.table by indexed column and rows按索引列和行子集 data.table
【发布时间】: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 &lt;- dt[, .I[.SD[[1]] %in% subset_by],.SDcols = z] ; dt[i1]

标签: r data.table


【解决方案1】:

如果我们基于索引或名称进行子集化,我们可以在.SDcols中指定它

i1 <- dt[, .I[.SD[[1]] %chin% subset_by], .SDcols = z]
dt[i1]

请注意,将data.table/tbl_df/data_frame 中的列子集为[[ 或$

subset_by <- unique(dt[[z]])[1:2]

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2018-04-30
    • 1970-01-01
    • 2021-07-23
    • 2016-07-03
    相关资源
    最近更新 更多