首页 文章

data.table - setkey(...)是否创建索引或对数据表中的行进行物理重新排序?

提问于
浏览
17

这个(非常基本的)问题是交换的结果here .

setkey() 的文档说明:

setkey()对data.table进行排序并将其标记为已排序 . 排序列是关键 . 密钥可以是任何顺序的任何列 . 列始终按升序排序 . 该表由参考更改...(强调添加)

我总是将其解释为 setkey() 创建索引,而不是物理地重新排列数据表的行(类似于索引数据库表) . 但如果这是真的,那么删除密钥(使用 setkey(DT,NULL) )应删除索引并将数据表恢复为原始的未排序顺序 . 这不是发生的事情:

library(data.table)
DT <- data.table(a=3:1, b=1:3, c=5:7); DT
   a b c
1: 3 1 5
2: 2 2 6
3: 1 3 7
setkey(DT,a); DT
   a b c
1: 1 3 7
2: 2 2 6
3: 3 1 5
setkey(DT,NULL)
   a b c
1: 1 3 7
2: 2 2 6
3: 3 1 5

所以有两个问题:

1:如果行重新排列(排序),那么“按引用更改”的含义是什么意思?

2: setkey(DT,NULL) 究竟做了什么?

1 回答

  • 12
    • 行已排序 . “通过引用更改”这里表示没有复制整个表,只是交换了行 .

    • setkey(DT, NULL) 相当于 setattr(DT, "sorted", NULL) . 它只是取消设置"sorted"属性 .

相关问题