2016-11-15 11 views
1

ich dreimal den folgenden Vektor unter Verwendung von a, b, c Wiederholung jeden Buchstaben erstellen möchten:Listen in einen Vektor Joining

BB<-c("a","a","a","b","b","b","c","c","c") 

Dies ist mein Code:

Alphabet<-c("a","b","c") 
AA<-list() 
for(i in 1:3){ 
    AA[[i]]<-rep(Alphabet[i],each=3) 
} 
BB<-do.call(rbind,AA) 

Aber ich bin ein immer Datenrahmen:

dput(BB) 
structure(c("a", "b", "c", "a", "b", "c", "a", "b", "c"), .Dim = c(3L, 
3L)) 

Was mache ich falsch?

+3

Verwenden Sie das 'each' Argument' rep (Alphabet, die jeweils = 3) ' – akrun

Antwort

1

Wie Akrun ist erwähnt wir die gleiche rep Funktion erstellen einen Vektor verwenden können, die aus Buchstaben besteht a, b, c

A <- c("A","B","C") 

Anwenden rep-Funktion für den gleichen Vektor, verwenden, um jedes als Unterfunktion

AA <- rep(A,each=3) 

print(AA) 

[1] "A" "A" "A" "B" "B" "B" "C" "C" "C" 
0

Hier ist eine Lösung, aber beachten Sie dieses Formular oder Anfügen nicht effizient für große Eingangs Arrays

Alphabet <- c("a","b","c") 
bb <- c() 
for (i in 1:length(Alphabet)) { 
    bb <- c(bb, rep(Alphabet[i], 3)) 
} 
+0

Bitte nicht Neulingen ermutigen für Schleifen in R Whenthere zu verwenden sind vektorisierte Funktionen verfügbar, zB 'rep (c (" A "," B "," C "), jeweils = 3)' - Danke. – Uwe

1

Sie sollten c Funktion zum Verketten verwenden, nicht die rbind. Dies wird dir Vektor geben.

Alphabet<-c("a","b","c") 
AA<-list() 
for(i in 1:3){ 
    AA[[i]]<-rep(Alphabet[i],each=3) 
} 
BB<-do.call(c,AA) 

Akrun Kommentar ist auch wahr, wenn das was Sie wollen.

1

Sie können auch die rep Funktion wie so verketten: BB <- c(rep("a", 3), rep("b", 3), rep("c", 3))

+0

Danke für die Antwort. +1 für den Trick. Eigentlich hatte ich eine lange Liste mit Namen, und ich wollte einen Vektor erstellen, der sich für eine bestimmte Anzahl von Malen nacheinander wiederholte. – runjumpfly