Je voudrais convertir cette trame de donnéesvariables d'appel à la fonction définie par l'utilisateur avec reshape2 :: fondre et reshape2 :: dcast
data <- data.frame(color=c("red","red","red","green","green","green","blue","blue","blue"),object=c("box","chair","table","box","chair","table","box","chair","table"),units=c(1:9),price=c(11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5))
à cette autre
output <- data.frame(color=c("red","green","blue"),units_box=c(1,4,7),price_box=c(11.5,14.5,17.5), units_chair=c(2,5,8),price_chair=c(12.5,15.5,18.5),units_table=c(3,6,9),price_table=c(13.5,16.5,19.5))
Par conséquent, je suis en utilisant reshape2::melt
et reshape2::dcast
pour construire une fonction définie par l'utilisateur comme suit
fun<-function(df,var,group){
r<-reshape2::melt(df,id.vars=var)
r<-reshape2::dcast(r,var~group)
return(r)
}
Lors de l'utilisation de la fonction comme suit
amusant (données, couleur, objet)
Je reçois le message d'erreur suivant
Erreur dans melt_check (données, id.vars, measure.vars, variable.name, valeur.name): objet 'couleur' pas trouvé
Savez-vous comment puis-je le résoudre? Je pense que le problème est que je devrais appeler les variables dans reshape2::melt
avec des guillemets mais je ne sais pas comment.
Note 1: Je voudrais garder le format numérique d'origine de variables (c.-à-objets sans décimales et prix avec une décimale)
Note 2: Je voudrais faire remarquer que que mon code réel (ce qui est juste exemple simplifié) est beaucoup plus long et implique des fonctions dplyr
(y compris les fonctions enquo() et UQ()). Par conséquent, les solutions pour ce cas devraient être compatibles avec dplyr
.
Note 3: Je n'utilise pas tidyr (je suis un grand amusement de tout le tidyverse) parce que le utilise toujours l'ancien langage pour les fonctions et je partage le script avec d'autres personnes qui pourraient ne pas vouloir utiliser le version de développement de tidyr
.
Merci pour l'idée, @akrun mais j'ai le même message d'erreur 'Erreur dans melt.data.table (df, id.vars = var): objet 'couleur' introuvable 'lors de l'utilisation de la fonction comme suit' fun <-fonction (df, var, groupe) { r <-reshape2 :: fusion (df, id.vars = var) r <-dcast (setDT (r), couleur ~ objet, valeur.var = c ("unités", "prix"), FUN = c (longueur, moyenne)) retour (r) } amusant (données, couleur, objet) ' – ungatoverde
@ungatoverde Je ne reçois aucune erreur avec votre exemple en utilisant 'data.table_1.10.5' Oh okay, basé sur votre fonction, où' data' est dans le 'fun'. Je vois que vous avez créé un objet 'r' – akrun
Désolé, vous avez raison. J'ai eu une erreur dans mon précédent commentaire. Je viens de le corriger. J'ajoute également les noms de fonction appropriés de data.table: \t 'fun <-fonction (df, var, groupe) {r <-data.table :: melt.data.table (df, id.vars = var) r <-data.table :: dcast.data.table (setDT (r), couleur ~ objet, valeur.var = c ("unités", "prix"), FUN = c (longueur, moyenne)) retour (r) } amusant (données, couleur, objet) 'mais toujours le même message d'erreur :-( – ungatoverde