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!

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)

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).


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.