Folge von wiederholten Werten nacheinander erstellen?

81

Ich brauche eine Folge von wiederholten Zahlen, dh 1 1 ... 1 2 2 ... 2 3 3 ... 3 etc.wie ich dies implementiert habe, war:

  nyear <- 20
  names <- c(rep(1,nyear),rep(2,nyear),rep(3,nyear),rep(4,nyear),
             rep(5,nyear),rep(6,nyear),rep(7,nyear),rep(8,nyear))

Das funktioniert, ist aber ungeschickt und skaliert offensichtlich nicht gut.

Wie wiederhole ich die N ganzen Zahlen jeweils M Mal nacheinander?

  • Ich habe versucht zu nisten seq()und rep()aber das hat nicht ganz das getan, was ich wollte.
  • Ich kann natürlich eine for-Schleife schreiben, um dies zu tun, aber es sollte einen intrinsischen Weg geben, dies zu tun!
Wesley Burr
quelle

Antworten:

161

Sie haben das each=Argument verpasst rep():

R> n <- 3
R> rep(1:5, each=n)
 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
R> 

So kann Ihr Beispiel mit einem einfachen gemacht werden

R> rep(1:8, each=20)
Dirk Eddelbuettel
quelle
1

Für Ihr Beispiel ist Dirks Antwort perfekt. Wenn Sie stattdessen einen groupDatenrahmen hatten und diese Art von Sequenz als Spalte hinzufügen möchten , können Sie auch from groupdata2 (Haftungsausschluss: mein Paket) verwenden, um die Datenpunkte gierig in Gruppen zu unterteilen.

# Attach groupdata2
library(groupdata2)
# Create a random data frame
df <- data.frame("x" = rnorm(27))
# Create groups with 5 members each (except last group)
group(df, n = 5, method = "greedy")
         x .groups
     <dbl> <fct>  
 1  0.891  1      
 2 -1.13   1      
 3 -0.500  1      
 4 -1.12   1      
 5 -0.0187 1      
 6  0.420  2      
 7 -0.449  2      
 8  0.365  2      
 9  0.526  2      
10  0.466  2      
# … with 17 more rows

Es gibt eine ganze Reihe von Methoden, um diese Art von Gruppierungsfaktor zu erstellen. ZB nach Anzahl der Gruppen, einer Liste von Gruppengrößen oder nach Beginn von Gruppen, wenn der Wert in einer Spalte vom Wert in der vorherigen Zeile abweicht (z. B. wenn eine Spalte c("x","x","y","z","z")der Gruppierungsfaktor ist) c(1,1,2,3,3).

ludvigolsen
quelle
1

Eine andere base ROption könnte sein gl():

gl(5, 3)

Wo die Ausgabe ein Faktor ist:

 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
Levels: 1 2 3 4 5

Wenn Ganzzahlen benötigt werden, können Sie diese konvertieren:

as.numeric(gl(5, 3))

 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
tmfmnk
quelle