2017-11-15 29 views
3

Rの文字ベクトルで要素をランダムに選択したい。Rの文字ベクトルで要素をランダムに選択するにはどうすればよいですか?

たとえば、 私は36文字の文字を含む文字ベクトルを持っています。

f <- c('A', 'B', 'C', 'D', 'E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','f','g','h','i','j','k') 

この文字ベクトルでランダムサンプリングを行いたいとします。 私が結果として作りたいのは以下のようなものです。

 [,1] [,2] [,3] 
[1,] "a" "B" "C" 
[2,] "D" "E" "F" 
[3,] "H" "I" "J" 
[4,] "K" "L" "M" 
     ... 
[12,] "Z" "c" "m" 

ポイントは私がランダムに交換せずにアルファベットを選択したいということで、選ばれたアルファベット

i <- 1 
a <- matrix(0,12,3) 

for(i in 1:12){ 
    a_temp <- sample(f,3) 

    while(any(a_temp==a)){ 
    idx <- which(f %in% a_temp) 
    f <- f[-idx] 
    a_temp <- sample(f,3) 
    } 
    a[i,] <- a_temp 
    i+1 
} 

> a 
     [,1] [,2] [,3] 
[1,] "D" "A" "G" 
[2,] "S" "f" "W" 
[3,] "M" "Q" "O" 
[4,] "M" "D" "U" 
[5,] "K" "C" "F" 
[6,] "E" "O" "b" 
[7,] "h" "V" "c" 
[8,] "N" "j" "k" 
[9,] "j" "a" "R" 
[10,] "B" "H" "f" 
[11,] "L" "i" "A" 
[12,] "E" "R" "X" 

を使用して上記のような行列を作るしかし、私は唯一の重複アルファベットが含まれる行列を得ることができます。

(私は何を意味することは、私がアルファベットのすべてが一度だけ選択するeqaul機会を持つようにしたいということです)

+2

を、あなたはそれぞれの文字を打ち込むのではなく、組み込みの 'LETTERS'と' letters'ベクターを使っていくらかの型を省くことができます。 – eipi10

答えて

10

あなたは一度だけサンプリングする必要があります。今後の参考のために

f <- c('A', 'B', 'C', 'D', 'E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','f','g','h','i','j','k') 
a <- matrix(sample(f),12,3) 

a 
     [,1] [,2] [,3] 
[1,] "U" "P" "a" 
[2,] "Z" "f" "B" 
[3,] "b" "I" "N" 
[4,] "k" "M" "c" 
[5,] "V" "Y" "E" 
[6,] "F" "K" "D" 
[7,] "L" "O" "X" 
[8,] "J" "A" "H" 
[9,] "g" "R" "d" 
[10,] "i" "j" "G" 
[11,] "S" "Q" "T" 
[12,] "C" "h" "W" 
関連する問題