Comment fonte et fonte dataframes à l'aide de dplyr?
Récemment, j'ai fais toutes mes données à l'aide de manipulations dplyr et c'est un excellent outil pour cela. Cependant, je suis incapable de fonte ou fonte d'un bloc de données à l'aide de dplyr. Est-il possible de faire cela? Droit maintenant, je suis en utilisant reshape2 à cette fin.
Je veux 'dplyr solution pour:
require(reshape2)
data(iris)
dat <- melt(iris,id.vars="Species")
- Le successeur de
reshape2
esttidyr
. L'équivalent demelt
etdcast
sontgather
etspread
respectivement. Il n'est pas disponible sur CRAN, mais vous pouvez le télécharger à partir de github (github.com/hadley/tidyr)! - Mise à jour:
tidyr
est maintenant sur CRAN (cran.r-project.org/web/packages/tidyr/index.html) - pourquoi n'avez-vous pas juste le mettre comme réponse adéquate?
- c'est comme d'hier!! 🙂 merci de me le faire savoir!
- Je pense qu'une réponse adéquate consisterait à plus de détails, comme par exemple, comment utiliser les
gather
pour atteindre la sortie de lamelt
exemple dans l'OP et je n'ai pas eu le temps pour cela. Mais j'ai pensé que je laisserais @koundy sais de toute façon...
Vous devez vous connecter pour publier un commentaire.
Le successeur de
reshape2
esttidyr
. L'équivalent demelt()
etdcast()
sontgather()
etspread()
respectivement. L'équivalent de votre code serait alorsSi vous avez
magrittr
importées, vous pouvez utiliser le tuyau de l'opérateur, comme dansdplyr
, c'est à dire écrireNotez que vous devez spécifier la variable et la valeur des noms explicitement, contrairement à
melt()
. Je trouve la syntaxe degather()
très pratique, car vous pouvez simplement spécifier les colonnes que vous souhaitez être convertis au format long, ou préciser celles que vous souhaitez rester dans le nouveau bloc de données en les préfixant par un '-' (tout comme pour les Espèces ci-dessus), qui est un peu plus rapide à taper que dansmelt()
. Cependant, j'ai remarqué que sur ma machine au moins,tidyr
peuvent être sensiblement plus lent quereshape2
.Modifier En réponse à @hadley s 'commentaire ci-dessous, je vais l'afficher certains timing info en comparant les deux fonctions sur mon PC.
system.time()
semble être ce qui fait la différence, même si je ne suis pas exactement sûr de ce que cela représente, mais je suis sûr que vous le savez 🙂En outre, la fonte peut être à l'aide de
tidyr::spread()
Exemple pour vous
À ajouter aux réponses ci-dessus à l'aide de @Lovetoken de
mini_iris
exemple (c'est trop complexe pour un commentaire) - pour les nouveaux venus qui ne comprennent pas ce que l'on entend par la fonte et le moulage.Fondre, c'est prendre le dataframe et l'expansion dans une longue liste de valeurs. Pas efficace, mais peut être utile si vous avez besoin de combiner des ensembles de données. Que de la structure d'un icecube de fusion sur une table et à s'écarter.
Vous pouvez voir comment les données ont été brisés en plusieurs lignes de valeur. Les noms de colonne sont maintenant du texte dans une variable de la colonne.
casting vont remonter en arrière d'un ensemble de données.table ou les données.cadre.