我可以从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
更好的方式?
答案 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。