【问题标题】:How can I randomly choosing elements in character vector in R?如何在 R 中随机选择字符向量中的元素?
【发布时间】:2018-04-28 05:06:51
【问题描述】:

我想在 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" 

但是,我只能得到包含重复字母的矩阵。

(我的意思是我想让所有的字母都有平等的机会被选择只有一次

【问题讨论】:

  • 为了将来参考,您可以使用内置的LETTERSletters 向量来节省一些输入,而不是输入每个字母。

标签: r


【解决方案1】:

您只需采样一次:

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" 

【讨论】:

    猜你喜欢
    • 2014-04-21
    • 2016-03-26
    • 2012-03-12
    • 2016-12-24
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2012-03-09
    • 2011-03-04
    相关资源
    最近更新 更多