2017-07-31 29 views
1

当在数字向量上设置data.table二级索引时,它似乎不允许使用on =语法对行进行子集。但是,我无法在文档中看到任何表明只有字符列可以作为二级索引的任何内容。 on =语法是否仅限于字符列?`data.table`二级索引是否有类型限制?

library(data.table) 
dt <- data.table(A = 1:10, B = letters[1:10]) 
setindex(dt, A, B) 
dt[on = "B", "c"] 
dt[on = "A", 3] 
+1

我可以把'dt [on =“A”,。(1)]'与dt一起工作,' - '不知道为什么会出现字符虽然不在列表中的作品。 – thelatemail

+0

这是一个好主意!它将查询放入列表时确实有效。在查看文档时,似乎作者打算将查询一般包装在二级索引列表中。随意提交你的答案,所以我可以接受它是正确的 – Bob

+0

我会等待,看看是否有更多的data.table精明的人与一个真正的原因,为什么一个工作,其他没有流行。我认为你是对的,名单是首选,但这似乎有点奇怪。 – thelatemail

回答

3

?data.table

i

characterlistdata.frame输入到i被转换成data.table内部使用as.data.table

因此,使用密钥或just with on=完成加入。

跳过.()字符列选项还注意到,在“按键和快速的二进制搜索”的小插曲,vignette("datatable-keys-fast-subset")

在字符类型的单个列键,可以删除.()符号和使用子集化时直接使用的值,如使用data.frames上的行名称的子集。

+0

重新回答你的答案的后半部分,这与键或索引没有任何关系,它只是'DT [']'的接口设计。如果你传递的数字没有'。()',它们被解释为行号。如果你传递一个没有'。()'的字符串,它会被解释为一个连接(我猜可以让'。()'为了方便而跳过)。如果你传递一个符号,它也被解释为一个连接。 – Frank

+0

我的错误,谢谢你的更正。 – Bob

相关问题