当前位置: 首页 > 知识库问答 >
问题:

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

孟晋
2023-03-14

这个(非常基本的)问题是这里交流的结果。

setkey()的文档说明:

setkey()对数据进行排序。表并将其标记为已排序。排序列是关键。键可以是任何顺序的任何列。列始终按升序排序。该表通过引用…(增加强调)进行了更改

我一直将此解释为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个答案

邵城
2023-03-14

>

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

    设置键(DT, 空) 等效于 setattr(DT, “排序”, 空)。它只是取消设置“已排序”属性。

  •  类似资料:
    • 问题内容: 我有一个看起来像这样的数据框: 它是使用以下代码创建的: 我要做的是根据预定义的列表对行(带有索引)进行排序。结果是: 我该如何实现? 问题答案: 你可以使用预定义的顺序设置指标像 但是,如果按字母顺序排列,则可以使用 如下所示,您需要将其分配给一些变量

    • 目前,我有一个名为的,看起来像这样,其中几何体表示一个点(纬度、经度)。 给定另一个点(lat,long),我想找到从这个数据框到那个特定点的最近点。我用距离函数计算了最近的点 现在我有一个系列,看起来像这样 我怎样才能得到一个Geodataframe的副本,它按相同的顺序排序,如下所示?谢谢

    • 我有一个像这样的数据框- 我有一个这样的列表- 现在,我想根据列名列表对数据框进行排序 因此,新的数据框将有列名称-

    • 问题内容: 第一次尝试熊猫,我试图先按照索引对数据透视表进行排序,然后再对一系列值进行排序。 到目前为止,我已经尝试过: 按索引然后按值对数据透视表进行排序的正确方法是什么? 问题答案: 这是一个可以做您想要的解决方案: 结果将如下所示: 将其作为API方法内置到熊猫中会很好。虽然不确定应该是什么样。

    • 本文向大家介绍MySQL中利用索引对数据进行排序的基础教程,包括了MySQL中利用索引对数据进行排序的基础教程的使用技巧和注意事项,需要的朋友参考一下 MySQL中,有两种方式生成有序结果集:一是使用filesort,二是按索引顺序扫描。利用索引进行排序操作是非常快的,而且可以利用同一索引同时进行查找和排序操作。当索引的顺序与ORDER BY中的列顺序相同且所有的列是同一方向(全部升序或者全部降序

    • 问题内容: 我想具有重新排列表中的行的功能(使用拖放对行进行排序)。 并且行排列的索引在模型中也应更改。 如何 使用Angular Directive 做类似的事情:http : //jsfiddle.net/tzYbU/1162/? 我正在生成表为: 问题答案: 我做的。请参阅下面的代码。 的HTML 指令(JS)