子集列适用于data.frame,但不适用于data.table

时间:2014-01-16 18:31:55

标签: r data.table multiple-columns subset

我可以从data.frame

中选择几列
> z[c("events","users")]
     events  users
1  26246016 201816
2    942767 158793
3  29211295 137205
4  30797086 124314

但不是来自data.table

> best[c("events","users")]
Starting binary search ...Error in `[.data.table`(best, c("events", "users")) : 
  typeof x.pixel_id (integer) != typeof i.V1 (character)
Calls: [ -> [.data.table

我该怎么办? 有没有比turn the data.table back into a data.frame更好的方式?

2 个答案:

答案 0 :(得分:6)

鉴于您正在寻找data.table后退,您应该在通话的list部分使用c而不是j

z[, list(events,users)]    # first comma is important

请注意,您不需要围绕列名称的引号。

答案 1 :(得分:5)

列子集应该在j中完成,而不是在i中。改为:

DT[, c("x", "y"), with=FALSE]

with=FALSE确保j未被评估为表达式。如果您正在寻找与data.frame上的子集类似的方法,那么这基本上是列子集的惯用方法。

检查this presentation(幻灯片4)以了解如何阅读data.table语法(更像SQL)。这有助于说服你在j中提供列更有意义 - 相当于SQL中的SELECT。