2017-10-09 5 views
-1

J'essaye de créer une permutation consécutive de valeurs dans r, mais je ne peux pas le créer selon mes besoins. cela devraitPermutation consécutive et combinaison dans r

ID   Val Perm 1 Perm 2 Perm3 Perm 4 Perm 5 Perm 6 Perm 7 Perm 8 Perm 9 Perm 10 Perm 11 Perm 12 Perm 13 Perm 14 Perm 15 Perm 16 Perm 17 Perm 18 Perm 19 Perm 20 Perm 21 Perm 22 Perm 23 Perm 24 Perm 25 Perm 26 Perm 27 Perm 28 Perm 29 Perm 30 Perm 31 Perm 32 Perm 33 Perm 34 Perm 35 Perm 36 
12,000  1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 
12,581  2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 
12,857  2 Range 3 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 
13,387  5 Range 3 Range 3 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 3 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 
15,846  2 Range 3 Range 3 Range 3 Range 2 Range 2 Range 2 Range 2 Range 2 Range 3 Range 3 Range 2 Range 2 Range 2 Range 2 Range 2 Range 3 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 
23,387  5 Range 3 Range 3 Range 3 Range 3 Range 2 Range 2 Range 2 Range 2 Range 3 Range 3 Range 3 Range 2 Range 2 Range 2 Range 2 Range 3 Range 3 Range 2 Range 2 Range 2 Range 2 Range 3 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 1 Range 1 Range 1 Range 1 Range 1 Range 1 
25,424  4 Range 3 Range 3 Range 3 Range 3 Range 3 Range 2 Range 2 Range 2 Range 3 Range 3 Range 3 Range 3 Range 2 Range 2 Range 2 Range 3 Range 3 Range 3 Range 2 Range 2 Range 2 Range 3 Range 3 Range 2 Range 2 Range 2 Range 3 Range 2 Range 2 Range 2 Range 2 Range 2 Range 2 Range 1 Range 1 Range 1 
25,424  2 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 2 Range 2 Range 3 Range 3 Range 3 Range 3 Range 3 Range 2 Range 2 Range 3 Range 3 Range 3 Range 3 Range 2 Range 2 Range 3 Range 3 Range 3 Range 2 Range 2 Range 3 Range 3 Range 2 Range 2 Range 3 Range 2 Range 2 Range 2 Range 2 Range 1 
25,932  6 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 2 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 2 Range 3 Range 3 Range 3 Range 3 Range 3 Range 2 Range 3 Range 3 Range 3 Range 3 Range 2 Range 3 Range 3 Range 3 Range 2 Range 3 Range 3 Range 2 Range 3 Range 2 Range 2 
25,932  1 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 Range 3 

Mais au lieu que je ne suis pas d'obtenir d'autres valeurs comme

apply(combinations(n=3,r=5,v = c("Range 1","Range 2","Range 3"),repeats.allowed = T),2,sort) 
     [,1]  [,2]  [,3]  [,4]  [,5]  
[1,] "Range 1" "Range 1" "Range 1" "Range 1" "Range 1" 
[2,] "Range 1" "Range 1" "Range 1" "Range 1" "Range 2" 
[3,] "Range 1" "Range 1" "Range 1" "Range 1" "Range 2" 
[4,] "Range 1" "Range 1" "Range 1" "Range 2" "Range 2" 
[5,] "Range 1" "Range 1" "Range 1" "Range 2" "Range 2" 
[6,] "Range 1" "Range 1" "Range 1" "Range 2" "Range 2" 
[7,] "Range 1" "Range 1" "Range 2" "Range 2" "Range 3" 
[8,] "Range 1" "Range 1" "Range 2" "Range 2" "Range 3" 
[9,] "Range 1" "Range 1" "Range 2" "Range 2" "Range 3" 
[10,] "Range 1" "Range 1" "Range 2" "Range 2" "Range 3" 
[11,] "Range 1" "Range 2" "Range 2" "Range 2" "Range 3" 
[12,] "Range 1" "Range 2" "Range 2" "Range 3" "Range 3" 
[13,] "Range 1" "Range 2" "Range 2" "Range 3" "Range 3" 
[14,] "Range 1" "Range 2" "Range 2" "Range 3" "Range 3" 
[15,] "Range 1" "Range 2" "Range 2" "Range 3" "Range 3" 
[16,] "Range 2" "Range 2" "Range 3" "Range 3" "Range 3" 
[17,] "Range 2" "Range 2" "Range 3" "Range 3" "Range 3" 
[18,] "Range 2" "Range 2" "Range 3" "Range 3" "Range 3" 
[19,] "Range 2" "Range 3" "Range 3" "Range 3" "Range 3" 
[20,] "Range 2" "Range 3" "Range 3" "Range 3" "Range 3" 
[21,] "Range 3" "Range 3" "Range 3" "Range 3" "Range 3" 

la logique pour la préparation des permutations des colonnes serait la première colonne de permutation (« Perm 1 ») soit comme le maintien de la « Range 1 "constant et" Range 2 "et" Range 3 "changeant," Range 2 "a été maintenu croissant et" Range 3 "décroissant jusqu'à la colonne" Perm 8 "et de la colonne" Perm 9 "la valeur" Range 1 "a été incrémenté de 1 et "Range 2" et "Range 3" changeant, "Range 2" a été maintenu croissant et "Range 3" décroissant jusqu'à la colonne "Perm 15" et de "Perm 16" la colonne "Range 1" a de nouveau incrémenté par 2 et ainsi de suite.

Peut-il être fait en utilisant une autre fonction? Merci d'avance.

Domnick.

+0

Avez-vous essayé la fonction 'expand.grid'? 'v <- c (" Plage 1 "," Plage 2 "," Plage 3 "); expand.grid (rep (liste (v), 5))' –

+0

Cela me donne un nombre égal de valeurs ("Plage 1" , "Plage 2", "Plage 3") pour chaque 5 colonnes – Domnick

Répondre

0

Votre motif n'est pas typique. De ce que je pourrais dire de votre modèle, vous pouvez essayer cette fonction personnalisée

library(purrr) 
library(dplyr) 
myfun <- function(n) { 
     require(purrr) 
     require(dplyr) 
     S <- "Range" 
     df <- Reduce("data.frame", lapply(1:(n-2), function(x) data.frame(c(paste0(S, 1), rep(paste0(S, 2), x), rep(paste0(S, 3), n-x-1))))) %>% 
       setNames(paste0("Perm", 1:(n-2))) 
     return(df) 
    } 

df <- myfun(6) 
    # Perm1 Perm2 Perm3 Perm4 
# 1 Range1 Range1 Range1 Range1 
# 2 Range2 Range2 Range2 Range2 
# 3 Range3 Range2 Range2 Range2 
# 4 Range3 Range3 Range2 Range2 
# 5 Range3 Range3 Range3 Range2 
# 6 Range3 Range3 Range3 Range3 
+0

Ont mis à jour la table attendue. – Domnick