Je suis d'utilisation des données.table et il y a beaucoup de fonctions qui m'obligent à définir une clé (par exemple, X[Y]
). En tant que tel, je veux comprendre ce qu'est une clé afin de définir correctement les touches dans mes tableaux de données.
Une source que j'ai lu était ?setkey
.
setkey()
sortes, unedata.table
et le marque comme triés. Les colonnes triées sont la clé. La clé peut être de toutes les colonnes dans un ordre quelconque. Les colonnes sont triées dans l'ordre croissant toujours. La table est modifiée par référence. Aucune copie n'est faite à tous, autres que temporaires de la mémoire de travail à une colonne.
Mon résumé est qu'ici la clé de "trier" les données.tableau, résultant en un effet très semblable à l' order()
. Cependant, elle n'explique pas le but d'avoir une clé.
Les données.tableau FAQ 3.2 et 3.3 explique:
3.2 je n'ai pas de clé sur une grande table, mais le groupe est encore très rapide. Pourquoi est-ce?
les données.table utilise une base de tri. C'est sensiblement plus rapide que les autres algorithmes de tri. Radix est spéciquement pour les entiers uniquement, voir
?base::sort.list(x,method="radix")
. C'est aussi une des raisons pour lesquellessetkey()
est rapide. Lorsqu'aucune touche n'est définie, ou nous groupe dans un ordre différent à partir de la clé, nous l'appelons une ad-hoc par.3.3 Pourquoi est-regroupement par des colonnes de la clé plus rapide qu'un groupe ad hoc?
Parce que chaque groupe est contiguë en mémoire vive, ce qui minimise la page extrait, et la mémoire peut être copié en vrac (
memcpy
C) plutôt que de boucle en C.
À partir d'ici, je suppose que la fixation d'une touche en quelque sorte, permet de R pour utiliser "radix tri" sur les autres algorithmes, et c'est pourquoi il est plus rapide.
Les 10 minutes guide de démarrage rapide dispose également d'un guide sur les touches.
- Touches
Nous allons commencer par un examen des données.cadre, en particulier rownames (ou dans En anglais, les noms de lignes). C'est, aux noms multiples appartenant à un seul ligne. Les multiples noms appartenant à la ligne? Ce n'est pas ce nous sommes habitués dans un ensemble de données.cadre. Nous savons que chaque ligne a au plus un nom. Une personne a au moins deux noms, un prénom et un nom. C'est utile d'organiser un annuaire téléphonique, par exemple, qui est triée par nom, puis le prénom. Cependant, chaque ligne dans une les données.cadre peut avoir qu'un seul nom.
Une clé se compose d'un ou de plusieurs les colonnes de rownames, qui peut être un entier, un facteur de caractères ou certains les autres de la classe, pas simplement de caractère. En outre, les lignes sont triées par à la clé. Par conséquent, un ensemble de données.le tableau peut avoir au plus une clé, parce que c' ne peuvent pas être classés dans plus d'une façon.
L'unicité n'est pas appliquée, c'est à dire, des valeurs de clés dupliquées sont autorisés. Puisque les lignes sont triées par la clé, tous les doublons dans la clé apparaît consécutivement
L'annuaire téléphonique a été utile dans la compréhension de ce qu'est une clé, mais il semble que la clé n'est pas différent quand par rapport à avoir un facteur de colonne. En outre, il ne permet pas d'expliquer pourquoi l'une des clés nécessaires (en particulier pour l'utilisation de certaines fonctions) et la façon de choisir la colonne à définir comme clé. Aussi, il semble que dans un ensemble de données.table avec le temps, comme une colonne, la fixation de l'autre colonne comme clé serait probablement désordre de la colonne heure de trop, ce qui rend encore plus confus que je ne sais pas si je me suis permis de définir n'importe quelle autre colonne comme clé. Quelqu'un peut-il m'éclairer s'il vous plaît?