2011-10-12 4 views
3

J'ai récemment posé une question sur le comptage du nombre de fois qu'un élément s'était répété (http://stackoverflow.com/questions/7669553/how-to-assign- nombre-de-répétitions-à-base de données-sur-les-éléments-d'identification/7669607 # 7669607) dans une grande trame de données. J'ai reçu quelques conseils très utiles, qui ont fonctionné sur un petit nombre de lignes, mais qui doivent maintenant effectuer l'opération à un niveau beaucoup plus grand (plus de 255k lignes, avec environ 100k groupes formés en utilisant ddply):Problèmes avec ddply pour diviser un grand nombre de catégories en R

Si vous tentez d'effectuer cette opération sur le jeu de données le plus volumineux, R risque de s'étouffer en raison de problèmes de mémoire. Y a-t-il des solutions évidentes à cela? Merci d'avance (surtout pour la patience car je suis un nouveau "programmeur").

Répondre

1

J'ai posté une nouvelle réponse à votre question originale ici How to assign number of repeats to dataframe based on elements of an identifying vector in R?.

Nous espérons que cela vous aidera ici et ici.

+0

Cette deuxième solution a fonctionné pour le problème particulier auquel je faisais face; Je vais jouer avec data.table et revenir vers vous car je pense que ce genre de chose se produira à nouveau dans une application différente. Merci! – SMM

5

Pour des problèmes vraiment grands comme cela, vous pouvez essayer d'utiliser data.table s plutôt que plyr:

library(data.table) 
data <- data.table(data) 

data[,transform(.SD,time = NROW(.SD)), by = uid] 

en supposant que la colonne time n'existe pas déjà.

Je suis encore en train d'apprendre data.table, alors que je bricole avec cela, il semble que cela peut être plus simple (et peut-être plus rapide):

data[,rep(.N, .N),by = uid] 

.N semble une variable interne qui représente le nombre des rangées de chaque sous-groupe.

+1

Cela m'intéresserait d'être exécuté avec ma solution avec system.time(). Moi aussi, que faut-il apprendre/travailler plus avec data.table, je doute qu'il offre des avantages pour seulement 255k lignes à moins qu'il y ait un tas de colonnes ... – nzcoops

Questions connexes