web-dev-qa-db-fra.com

Séquence de valeurs répétées en R

C'est une question très basique, mais ça m'énerve, alors je pose la question.

J'ai besoin d'une séquence de nombres répétés, c'est-à-dire 1 1 ... 1 2 2 ... 2 3 3 ... 3 etc. La façon dont j'ai implémenté cela a été

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

ce qui fonctionne, mais est maladroit, et évidemment ne s’adapte pas bien. Comment est-ce que je répète les N nombres entiers M fois chacun en séquence? J'ai essayé d'imbriquer seq () et rep () mais cela n'a pas tout à fait répondu à mes attentes. Je peux évidemment écrire une boucle for qui le fera, mais cela semble aussi maladroit - il devrait y avoir un moyen intrinsèque de le faire!

65
Wesley Burr

Vous avez manqué l'argument each= 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> 

afin que votre exemple peut être fait avec un simple

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

Pour votre exemple, la réponse de Dirk est parfaite. Si vous disposiez plutôt d'un cadre de données et souhaitez ajouter ce type de séquence sous forme de colonne, vous pouvez également utiliser group à partir de groupdata2 (disclaimer: my package) pour diviser les points de données de manière vaine en groupes.

# 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

Il existe toute une gamme de méthodes pour créer ce type de facteur de regroupement. Par exemple. par nombre de groupes, une liste de tailles de groupes ou en faisant démarrer les groupes lorsque la valeur de certaines colonnes diffère de celle de la ligne précédente (par exemple, si une colonne est c("x","x","y","z","z"), le facteur de regroupement serait c(1,1,2,3,3).

0
ludvigolsen