2017-06-27 3 views
0

Im Wesentlichen nehme ich eine Liste von Emotionen und versuche, jede Emotion auf der Liste 6 Mal zu replizieren und sie dann zu einem Vektor hinzuzufügen. Zum Beispiel:Warum wird meine for-Schleife nicht über die gesamte Liste iterieren?

emotions<-c("Happy","Sad","Angry") 

wird wie folgt aussehen:

emotions2<-c("Happy","Happy","Happy","Happy","Happy","Happy","Sad","Sad","Sad","Sad","Sad","Angry","Angry","Angry","Angry","Angry","Angry") 

Gerade jetzt, dies zu tun, ich eine for-Schleife verwende aber aus irgendeinem Grund zu replizieren es nur die erste Emotion, die Schaffung der Vektor, emotions2 < -c ("Glücklich", "Glücklich", "Glücklich", "Glücklich", "Glücklich", "Glücklich").

Mein Code sieht so aus: pmd.df3 ist mein Datenrahmen und Emotions ist die neue Spalte darin, wo ich diese Informationen speichern werde.

pmd.df3$Emotions<-(
    for(ele in emotions){ 
     new.column<-replicate(6,ele) 
     print(new.column) 
    } 
    ) 

Bitte lassen Sie mich wissen, wenn Sie helfen können!

+0

Bitte geben Sie bei Ihrer Frage an, welche Programmiersprache Sie verwenden. –

+0

Vorschlag: Erwähnen Sie die Programmiersprache, in der sich Ihr Code befindet. Dadurch können Sie die Lösung schneller erhalten, da die richtigen Entwickler Ihren Code sehen können. Kennzeichnen Sie Ihre Fragen immer mit den richtigen Tags. –

+0

Sie haben Recht - mein Fehler! Danke, dass du mich erinnert hast. –

Antwort

0

Um das zu erreichen, können Sie lapply und unlist (eine Funktion jedes Element einer Liste/Vektor anzuwenden) (die resultierende Liste von Listen abzuflachen):

pmd.df3$Emotions <- unlist(lapply(emotions, function(x) { rep(x, 6) })) 

Voll Beispiel:

emotions <- c("Happy", "Sad", "Angry") 
pmd.df3 = data.frame(id = seq(1, 18)) 

pmd.df3$Emotions <- unlist(lapply(emotions, function(x) { rep(x, 6) })) 
pmd.df3 
# id Emotions 
# 1 1 Happy 
# 2 2 Happy 
# 3 3 Happy 
# 4 4 Happy 
# 5 5 Happy 
# 6 6 Happy 
# 7 7  Sad 
# 8 8  Sad 
# 9 9  Sad 
# 10 10  Sad 
# 11 11  Sad 
# 12 12  Sad 
# 13 13 Angry 
# 14 14 Angry 
# 15 15 Angry 
# 16 16 Angry 
# 17 17 Angry 
# 18 18 Angry 
+0

Das hat funktioniert! Danke für die Hilfe. –

+0

Können Sie mir sagen, warum mein Code nicht funktioniert hat? Es funktionierte, als ich "Drucken" sagte, aber sobald ich es als Vektor speicherte, löschte es alle Emotionen, aber für die erste (die es 6 Mal replizierte). –

+0

@AndrewColin Ich bin nicht zu vertraut mit der Verwendung von 'print' im Code wie Sie, aber ich * denke *, was los war, ist, dass Sie nicht alle Emotionen in einem einzigen Vektor zusammengefasst haben (' pmd.df3 $ Emotions <-' erwartet einen einzelnen Vektor, nicht mehrere. Auch wenn meine Antwort die richtige ist, kannst du sie als akzeptiert markieren;) –

0

Um von Shambalambalas Antwort zu piggyback, kann rep dies nativ verarbeiten, ohne dass man lapply oder eine for-Schleife benötigt.

emotions <- c("Happy", "Sad", "Angry") 
pmd.df3 = data.frame(id = seq(1, 18)) 
pmd.df3$Emotions <- rep(emotions, each = 6) 

    id Emotions 
1 1 Happy 
2 2 Happy 
3 3 Happy 
4 4 Happy 
5 5 Happy 
6 6 Happy 
7 7  Sad 
8 8  Sad 
9 9  Sad 
10 10  Sad 
11 11  Sad 
12 12  Sad 
13 13 Angry 
14 14 Angry 
15 15 Angry 
16 16 Angry 
17 17 Angry 
18 18 Angry 
+0

Das hat auch funktioniert. Danke für das Teilen dieser Option auch! –

Verwandte Themen