7
votes

Équivalent pour DLPLY dans les données.Table

J'essaie d'obtenir la même chose ce que DLPLY fait avec data.table . Donc, tout comme un exemple très simple: xxx

évidemment les valeurs de retour de foo sont effondrées à un datable.table . Et je ne veux pas utiliser dlply car il passe la division data.tables comme data.frames to foo Qui rend d'autres opérations de données.Table dans FOO inefficace.


3 commentaires

Plyry est un emballage séparé destiné à convertir entre différentes structures de données avec facilité. Data.Table est implémentée comme une donnée efficace / améliorée. C'est son seul but. Donc, il n'y a pas de méthode efficace interne pour le faire. Ce que vous avez montré déjà (labraque) est ce que l'on peut faire.


Pourquoi voudriez-vous diviser une donnée? Cela va à l'encontre de l'ensemble des données d'utilisation de données.Table (meilleure efficacité en évitant les copies).


@Roland je suis totalement d'accord. Peut-être que mon exemple n'était pas assez clair. Ce que je veux réellement faire consiste à effectuer sur une série de données de données. Certaines opérations qui construisent dans la fin de référence référenclasses que je souhaite retourner comme une liste.


3 Réponses :


2
votes

Essayez ceci:

> split(dt, dt[["p"]])
$A
   p q
1: A 1

$B
   p q
1: B 2


1 commentaires

Oh c'était simple :-) Je m'interrogeais simplement sur la performance, puisque Split n'utilise pas data.Tables de la syntaxe et des capacités. Mais votre réponse m'a réellement donné l'allusion à la bonne direction. Merci beaucoup pour ça!



2
votes

Concernant la réponse de G. Grothendieck, j'étais curieux, j'ai été curieux à quel point Split Effectue:

lapply( unique(dt[,p]), function(x) dt[x] )


0 commentaires

3
votes

Voici un datable.table approche orientée: xxx

Il y a plus de datable.table alternatives de style à ce qui précède mais que Semble être le plus rapide - voici une comparaison avec labapply : xxx


10 commentaires

+1 pour utiliser .by , lequel de ces .var s je n'ai pas encore appris à utiliser.


Je n'aime pas la syntaxe mais cela répond mieux à ma question.


Il suffit de réaliser que dt [ liste (liste (...)), by = p] n'est pas seulement la réponse la mieux mais parfaite à ma question. La colonne de résultat v1 peut même contenir des objets de n'importe quel type (primitives, objets de référence S3, S4, référencyclasses, ...). Cela dit, je déteste encore la syntaxe encore plus :-)


@Beasterfield Que détestes-tu exactement sur la syntaxe? Qu'attendiez-vous à la place ou pourquoi ne répond pas à vos attentes?


Eh bien, ce n'est pas que ce n'est pas aussi facile à utiliser que dlply mais esthétiquement j'aime dlply (dt, "id", foo) meilleur que dt [ liste (Liste (FOO (.SD))), by = id] $ v1 .


convenu, pour cette tâche particulière dlply a une expression plus courte - c'est ce que vous obtenez lorsque vous vous spécialisez d'un côté et demandez à SMTH non-normalement demandé à l'autre; Mais si vous avez une suggestion sur la façon dont vous pensez que cette opération pourrait mieux s'adapter à la syntaxe data.table - je serais curieux de l'entendre


Si drôle, j'ai couru aujourd'hui à nouveau dans le même problème et a finalement trouvé cela super question et encore une réponse plus grande ;-) @eddi pour répondre à votre commentaire de près d'un an, qu'en est-il d'une syntaxe comme DT [ foo, by = id, jaslist = true] ?


@Beasterfield Je pense qu'une sorte de personnalisation de ce qui arrive aux résultats de j pour chaque groupe est longuement dû. Certaines choses qui pourraient arriver sont - que se passe-t-il maintenant, votre suggestion de la laisser comme une liste, une liaison plus avancée ensemble, y compris des colonnes non correspondantes, ou une correspondance de colonnes hors commandes. J'encourage vivement à soumettre une demande de fonctionnalité à ce sujet.


@eddi je suis vraiment désolé. Je semble être trop stupide pour créer un compte rurge. J'ai bien peur de ne pas être capable de soumettre une demande de fonctionnalité ailleurs?


@Beasterfield :) OK, FR Ajouté - r-forge.r-project.org/tracker/.../a>