¿Crear secuencia de valores repetidos, en secuencia?

81

Necesito una secuencia de números repetidos, es decir, 1 1 ... 1 2 2 ... 2 3 3 ... 3 etc.la forma en que implementé esto fue:

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

que funciona, pero es torpe y, obviamente, no escala bien.

¿Cómo repito los N números enteros M veces cada uno en secuencia?

  • Intenté anidar seq()y rep()eso no hizo lo que quería.
  • Obviamente, puedo escribir un bucle for para hacer esto, ¡pero debería haber una forma intrínseca de hacerlo!
Wesley Burr
fuente

Respuestas:

161

Te perdiste el each=argumento de 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> 

para que su ejemplo se pueda hacer con un simple

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

Para su ejemplo, la respuesta de Dirk es perfecta. Si, en cambio, tuviera un marco de datos y quisiera agregar ese tipo de secuencia como columna, también podría usar groupfrom groupdata2 (descargo de responsabilidad: mi paquete) para dividir codiciosamente los puntos de datos en grupos.

# 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

Existe una amplia gama de métodos para crear este tipo de factor de agrupación. Por ejemplo, por número de grupos, una lista de tamaños de grupo, o haciendo que los grupos comiencen cuando el valor en alguna columna difiere del valor en la fila anterior (por ejemplo, si una columna es c("x","x","y","z","z")el factor de agrupación sería c(1,1,2,3,3).

Ludvigolsen
fuente
1

Otra base Ropción podría ser gl():

gl(5, 3)

Donde la salida es un factor:

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

Si se necesitan números enteros, puede convertirlos:

as.numeric(gl(5, 3))

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