2017-06-20 110 views
1

恐怕我无法找到我的问题的答案。随机化R订购

我期待创造

1)他们是4套牌A,B,C,d和16卡。 2)每张卡在一组内进行编号(A从1到4,B从5到8,依此类推)。 3)我们希望随机分配任务,使得每个人随机分配一组卡,例如A. 4)此外,组内卡的顺序必须是随机的。

所以,我们要的是以下几点: 人1:设置A,卡1-2-3-4 人2:设置A,卡4231 人3:设置d,卡16-15-12-13 等。

我也想每个号码在一个单独的列。

感谢您的帮助! S.

+0

这是相当简单的。你到目前为止尝试过什么,以及你卡在哪里?是否只有4套卡和只有4人? –

回答

0

这里有一种方法来解决这个问题。

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

这里的另一种选择:

# 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

如果每个人得到一个套牌

> 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