2017-06-20 1 views
1

J'ai peur de ne pas trouver de réponse à mon problème.Randomisation R commande

Je cherche à créer

1) Ils sont 4 séries de cartes A, B, C, D et 16 cartes. 2) Chaque carte est numérotée dans un ensemble (A de 1 à 4, B de 5 à 8, et ainsi de suite). 3) Nous voulons randomiser l'assignation de façon à assigner aléatoirement à chaque personne un ensemble de cartes, par exemple A. 4) De plus, l'ordre des cartes dans l'ensemble doit être aléatoire.

donc ce que nous voulons est la suivante: Personne 1: la série A, cartes 1-2-3-4 Personne 2: Set A, cartes 4-2-3-1 Personne 3: Set D, cartes 16-15-12-13 et ainsi de suite.

Je voudrais également que chaque numéro soit dans une colonne séparée.

Merci pour votre aide! S.

+0

Ceci est assez simple. Qu'avez-vous essayé jusqu'à présent et où vous coincez-vous? Y a-t-il seulement 4 jeux de cartes et seulement 4 personnes? –

Répondre

0

Voici une façon d'aborder cette question.

person <- c("Person1", "Person2", "Person3", "Person4") 
cardset <- LETTERS[1:4] 

set.seed(357) # this is for reproducibility 

xy <- data.frame(
    person = sample(person), # pick out persons in a random order 
    set = sample(cardset)) # assign a random card set to a person 

vx <- rep(xy$set, each = 4) # for each set, create repeats 
vy <- split(paste(vx, rep(1:4, times = 4), sep = ""), f = vx) # append numbers to it 
vz <- do.call(rbind, sapply(vy, FUN = sample, simplify = FALSE)) # shuffle using sapply and stitch together with do.call 
cbind(xy, vz) # add it to the original data 

    person set 1 2 3 4 
A Person1 C A4 A3 A2 A1 
B Person4 B B2 B1 B4 B3 
C Person3 D C2 C3 C4 C1 
D Person2 A D1 D2 D4 D3 
0

est ici une autre option:

# create data frame of decks and their numbered cards 
cards <- data.frame(deck = rep(LETTERS[1:4], each = 4), 
        numbers = c(1:16), 
        stringsAsFactors = FALSE) 
# create list of people 
people <- c("Person1", "Person2", "Person3") 

# loop through each person and randomly select a deck 
# based on deck selected, subset the cards that can be used 
# randomize the numbered cards 
# add the deck, order of cards, and person to a 
# growing data frame of assignments 

assignment <- NULL 
for(i in unique(people)) { 
    set <- sample(cards$deck, size = 1) 
    setCards <- cards[cards$deck == set, ] 
    orderCards <- sample(setCards$numbers) 
    assignment <- rbind(assignment, data.frame(Person = i, 
              Deck = set, 
              Card1 = orderCards[1], 
              Card2 = orderCards[2], 
              Card3 = orderCards[3], 
              Card4 = orderCards[4], 
              stringsAsFactors = FALSE)) 

} 
1

si chaque personne reçoit une série de cartes

> df=NULL 
    > a=rep(LETTERS[1:4],4) 
    > df$card1=sample(a,16,F) 
    > df=as.data.frame(df) 

> df=df[order(card1),] 
> df 
    card1 
1:  A  
2:  A  
3:  A  
4:  A  
5:  B  
6:  B  
7:  B  
8:  B  
9:  C  
10:  C  
11:  C  
12:  C  
13:  D  
14:  D  
15:  D  
16:  D  
> df$card2=rep((1:4),4) 
> df 
    card1 card2 
1:  A  1 
2:  A  2 
3:  A  3 
4:  A  4 
5:  B  1 
6:  B  2 
7:  B  3 
8:  B  4 
9:  C  1 
10:  C  2 
11:  C  3 
12:  C  4 
13:  D  1 
14:  D  2 
15:  D  3 
16:  D  4 
> df1=df[sample(nrow(df)),] 
> df1 
    card1 card2 
1:  A  2 
2:  D  4 
3:  C  3 
4:  D  3 
5:  B  3 
6:  D  1 
7:  C  2 
8:  A  3 
9:  B  2 
10:  D  2 
11:  B  1 
12:  A  1 
13:  C  4 
14:  C  1 
15:  B  4 
16:  A  4