2016-10-02 2 views
-2

J'ai une base de données (DF_melted) que j'ai obtenue en fondant un autre ensemble de données. La trame de données DF_melted contient les colonnes "mois", "A", "B", "C", "D", "E", "F". À partir du code suivant en utilisant dcast, je suis en mesure d'obtenir un dataframe qui contient la valeur de la moyenne de la variable pour chaque combinaison de "A" et "mois". Tout cela fonctionne bien et comme prévu.r Utiliser dcast dans la boucle for pour trouver la moyenne de plusieurs colonnes et les compiler dans une nouvelle base de données

dcast_data<-dcast(DF_Melted, 
       month+A~variable, 
       fun.aggregate = mean) 

question- Sur les lignes du code ci-dessus, je veux courir une boucle pour obtenir automatiquement l'ensemble de données (en utilisant dcast) pour le rapport du mois + A, mois + B, mois + C, mois + D. Je suis incapable de comprendre comment substituer 'A' (ou B, C, D) d'une manière parémétrique.

J'ai essayé le code suivant où je fais référence à A, B, C, D selon leur numéro de colonne dans DF_melted et il fonctionne:

for(j in seq(2,5, by=1)) #'A' is 2nd column, 'D' is 5th column 
{ 
    dcast_data<-dcast(DF_Melted, 
       month+DF_Melted[,j]~variable, 
       fun.aggregate = mean)  
    FinalDF<-cbind(FinalDF,dcast_data) 
} 

Bien que les travaux ci-dessus, je me demande s'il y a un façon plus intelligente de faire ce qui précède sans faire référence au numéro de colonne de la trame de données? Finalement, mon intention est d'obtenir une base de données 'FinalDF' afin que je puisse l'utiliser pour tracer le graphe de variables mois/s pour chaque catégorie de A, B, C, D. Donc, faire cette refonte automatique des données serait une aide immense.

+0

S'il vous plaît montrer un petit exemple reproductible et les résultats escomptés. Sur la base des informations, vous pouvez également "fondre" les colonnes "A/B/C/D" dans une seule colonne, puis faire le 'dcast' – akrun

+0

L'ensemble de données est une base de données de films avec des lignes comme noms de films. Les noms A, B, C, D 'action', 'drame', 'comédie', 'thriller' et leurs valeurs sont 1 ou 0. Donc si film dans la rangée 45 est action et comédie, ces deux colonnes auront des entrées 1'. 'Variable' dans la base de données fondue est le revenu en $ La base de données est trop grande (et a beaucoup plus de genres) pour donner un exemple. Extrêmement désolé de ne pas l'avoir fourni. Je suis sûr qu'il y a un moyen facile de l'afficher, mais je suis nouveau à R et je ne suis pas sûr de savoir comment le faire. – Sinha

+0

vous pouvez vous référer [ici] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – akrun

Répondre

0

Tenir compte d'une do.call(cbind, dfList) sur une liste de trames de données fondu:

dfList <- lapply(c("A", "B", "C", "D"), function(i) { 
    dcast(DF_Melted, month+DF_Melted[i]~variable, 
      fun.aggregate = mean) 
}) 

FinalDF <- do.call(cbind, dfList)