L'objectif est de créer des indicateurs pour une variable facteur/chaîne dans une trame de données. Cette trame de données a des rangées> 2mm, et en exécutant R sur Windows, je n'ai pas l'option d'utiliser plyr avec .parallel = T. Donc, je prends la route "diviser pour régner" avec plyr et reshape2.Génération d'indicateurs dans de grandes trames de données
Exécution fonte et fonte manque de mémoire, et en utilisant
ddply(idata.frame(items) , c("ID") , function(x){
( colSums(model.matrix(~ x$element - 1)) > 0 )
} , .progress="text")
ou
ddply(idata.frame(items) , c("ID") , function(x){
( elements %in% x$element )
} , .progress="text")
prend un certain temps. L'approche la plus rapide est l'appel à tapply ci-dessous. Voyez-vous un moyen d'accélérer cela? L'instruction% in% s'exécute plus vite que l'appel model.matrix. Merci.
set.seed(123)
dd <- data.frame(
id = sample(1:5, size=10 , replace=T) ,
prd = letters[sample(1:5, size=10 , replace=T)]
)
prds <- unique(dd$prd)
tapply(dd$prd , dd$id , function(x) prds %in% x)
Je suis confus par votre exemple. Vous divisez 'dd $ prd' par' dd $ id', puis demandez quelles valeurs de 'prds' sont représentées dans chaque id - mais' prds' n'est pas trié (!) Voulez-vous 'prds <- sort (unique (dd $ prd)) '(ça me ferait beaucoup plus de sens ...)? –
Tant que les indicateurs (les logiques) correspondant aux éléments disponibles dans prds ont le même ordre entre les ID, peu importe la façon dont ils sont triés. –
OK. Voir mon autre question, dans ma réponse ci-dessous ... –