Il ressemble à Wes peut-être découvert un problème connu en data.table
lorsque le nombre de chaînes uniques (niveaux) est importante: 10 000 personnes.
N' Rprof()
révèlent la plupart du temps passé dans l'appel sortedmatch(levels(i[[lc]]), levels(x[[rc]])
? Ce n'est pas vraiment le rejoindre lui-même (l'algorithme), mais d'une étape préliminaire.
De récents efforts ont été déployés pour permettre des colonnes de caractères dans les touches, ce qui devrait résoudre le problème en intégrant plus étroitement avec le R est propre chaîne globale de la table de hachage. Certains résultats sont déjà signalées par test.data.table()
mais ce code n'est pas accroché encore à remplacer les niveaux de niveaux de match.
Sont pandas fusionne plus rapide que l' data.table
pour régulièrement les colonnes de type entier? Que devrait être un moyen d'isoler l'algorithme lui-même vs facteur de questions.
Aussi, data.table
a l'heure de la série fusion dans l'esprit. Deux aspects: i) colonne multi commandé clés telles que (id,datetime) ii) en vigueur rapide de jointure (roll=TRUE
).k.un. dernière observation reportée.
Je vais avoir besoin de quelques temps pour confirmer que c'est la première fois que j'ai vu de la comparaison de data.table
tel que présenté.
Mise à JOUR de données.tableau v1.8.0 publié en juillet 2012
- Fonction interne sortedmatch() retiré et remplacé par chmatch()
lors de l'appariement j'niveaux à x niveaux pour les colonnes de type "facteur". Cette
étape préliminaire était à l'origine un (connu) ralentissement considérable quand le nombre
des niveaux d'un facteur de colonne est grande (par exemple, >10 000 habitants). Exacerbée dans
les tests de rejoindre quatre colonnes, comme l'a démontré par Wes McKinney
(l'auteur du paquet Python Pandas). De correspondance de 1 million de chaînes de qui
dont 600 000 sont uniques, est maintenant réduit à partir de 16 ans pour 0,5 s, par exemple.
aussi dans cette version était :
les colonnes de caractères sont désormais autorisés dans les touches et sont préférés à
facteur. les données.tableau() et setkey() de ne plus contraindre à caractère
facteur. Les facteurs sont toujours pris en charge. Implémente FR#1493, FR#1224
et (partiellement) FR#951.
De nouvelles fonctions chmatch() et le %de menton%, soit plus rapidement les versions de match()
et %dans% pour le personnage de vecteurs. R interne du cache de chaîne est
utilisés (pas de table de hachage est construit). Ils sont environ 4 fois plus vite
de match() sur l'exemple ?chmatch.
Comme d'Sep 2013 données.le tableau est v1.8.10 sur CRAN et nous travaillons sur v1.9.0. NEWS est mise à jour en direct.
Mais comme je l'ai écrit à l'origine, ci-dessus :
data.table
a l'heure de la série fusion dans l'esprit. Deux aspects: i)
multi colonne commandée clés telles que (id,datetime) ii) en vigueur rapide
join (roll=TRUE
).k.un. dernière observation reportée.
Si les Pandas equi jointure de deux colonnes de caractères est probablement encore plus rapide que de données.table. Car il sonne comme il hache le combiné deux colonnes. les données.le tableau n'a pas de hachage de la clé, car il a en vigueur commandé se joint à l'esprit. Une "clé" dans les données.le tableau est littéralement juste l'ordre de tri (similaire à un index cluster SQL; à savoir, c'est comment les données sont ordonnées dans la RAM). Sur la liste est d'ajouter des clés secondaires, par exemple.
En résumé, la flagrante différence de vitesse mis en évidence par ce particulier de deux caractères-colonne de test avec plus de 10 000 chaînes uniques ne devrait pas être aussi mauvais maintenant, depuis que le problème a été résolu.