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

sds*_*sds 1 r subset multiple-columns data.table

我可以从以下几个列中选择data.frame:

> z[c("events","users")]
     events  users
1  26246016 201816
2    942767 158793
3  29211295 137205
4  30797086 124314
Run Code Online (Sandbox Code Playgroud)

但不是来自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
Run Code Online (Sandbox Code Playgroud)

我该怎么办?有没有比data.table背部变成一个data.frame更好的方法?

Mat*_*ler 6

鉴于你正在寻找一个data.table后卫,你应该使用list而不是cj通话中.

z[, list(events,users)]    # first comma is important
Run Code Online (Sandbox Code Playgroud)

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


Aru*_*run 5

列子集应该在j,而不是在i.改为:

DT[, c("x", "y"), with=FALSE]
Run Code Online (Sandbox Code Playgroud)

with=FALSE可以确保j不计算为一个表达式.如果您正在寻找与data.frame上的子集相似的方法,那么这基本上是列子集的惯用方法.

查看此演示文稿(幻灯片4)以了解如何阅读data.table语法(更像SQL).这有助于说服你提供列更有意义j- 相当于SQL中的SELECT.