2017-06-20 105 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