2017-08-07 2 views
1

Je suis assez nouveau dans R, en essayant de trouver mon pourquoi. J'ai créé une nouvelle trame de données basée sur le cadre de données "original".créer un sous-ensemble de trame de données lors de l'exécution d'une boucle

library(dplyr) 
prdgrp <- as.vector(mth['MMITCL']) 
prdgrp %>% distinct(MMITCL) 

Lorsque vous faites cela, le résultat est une liste de valeurs uniques de la colonne MMITCL. Je voudrais utiliser ces données dans une séquence de boucle qui crée d'abord un nouveau sous-ensemble des données originales et les imprime un graphique basé sur ce point:

#START LOOP 
for (i in 1:length(prdgrp)) 
{ 
# mth[c(MMITCL==prdgrp[i],] 
mth_1 <- mth[c(mth$MMITCL==prdgrp[i]),] 
# Development of TPC by month 
library(ggplot2) 
library(scales) 
ggplot(mth_1, aes(Date, TPC_MTD))+ geom_line() 
} 
# END LOOP 

Faire cela me donne le message d'erreur suivant:

Error in mth$MMITCL == prdgrp[i] : 
    comparison of these types is not implemented 
In addition: Warning: 
I `[.data.frame`(mth, c(mth$MMITCL == prdgrp[i]),) : 
    Incompatible methods ("Ops.factor", "Ops.data.frame") for "==" 

Qu'est-ce que je fais mal.

Répondre

1

Si vous voulez simplement tracer les sorties, il n'est pas nécessaire de sous-créer la base de données, il est plus simple de simplement placer ggplot dans une boucle (ou plus probablement d'utiliser facet_wrap). Sans voir vos données, il est un peu difficile de vous donner une réponse précise. Cependant, il y a deux exemples d'iris génériques ci-dessous - j'espère que ceux-ci montreront également où vous avez fait l'erreur dans la définition de votre dataframe. S'il vous plaît laissez-moi savoir si vous avez des questions. Toutefois, si vous avez besoin de sauvegarder les trames de données pour une utilisation ultérieure, une option consiste à les mettre dans une liste. Si vous avez seulement besoin de sauvegarder la trame de données avec dans la boucle, vous pouvez simplement supprimer la liste et utiliser le nom de la variable que vous souhaitez.

myData4Later <- list() 

for(i in 1:length(unique(iris$Species))){ 
    myData4Later[[i]] <- iris[iris$Species == unique(iris$Species)[i], ] 
    g <- ggplot(data = myData4Later[[i]], 
       aes(x = Sepal.Length, 
        y = Sepal.Width)) + 
    geom_point() 
    print(g) 
} 
+0

oui vous avez raison. Je n'ai pas ajouté le code complet de ce que je souhaite faire, car je fais aussi des prévisions de Holt-Winter sur les données plus tard que je souhaite stocker. Mes appoligies pour ne pas inclure cela. –

+0

Est-ce que l'ajout ci-dessus répond à votre question? Une partie de votre problème est lorsque vous sous-ensemble les données que vous utilisez c() dans le []. Il peut y avoir d'autres problèmes, mais vous devrez publier un exemple de travail minimal. –

+0

il a résolu ma question. Merci beaucoup pour votre aide. Apprécié. –