【问题标题】:How to create a random logical vector with specific numbers of TRUE / FALSE entries如何创建具有特定数量的 TRUE / FALSE 条目的随机逻辑向量
【发布时间】:2020-02-19 10:46:34
【问题描述】:

我想创建一个有 10 行的逻辑向量,每行随机分配 TRUE 或 FALSE。但是,我希望只有 3 个 FALSE 和 7 个 TRUE。

期望结果示例(具有三个随机分配的 FALSE 条目和 7 个随机分配的 TRUE 条目的逻辑向量):

> vector
 [1] "TRUE"  "TRUE"  "FALSE" "TRUE"  "FALSE" "FALSE" "TRUE" "TRUE" "TRUE" 
[10] "TRUE" 

我可以创建一个大小为 10 且具有 TRUE 或 FALSE 的逻辑向量,但我不知道如何指定我想要三个 FALSE 条目和 7 个 TRUE 条目。

vector <- sample(x = c("TRUE","FALSE"), size = 10, replace = TRUE)

这会产生:

> train
 [1] "TRUE"  "TRUE"  "FALSE" "TRUE"  "FALSE" "FALSE" "FALSE" "FALSE" "FALSE"
[10] "TRUE" 

其中 TRUE 和 FALSE 条目的数量不正确(4 个 TRUE 和 6 个 FALSE)。

【问题讨论】:

  • sample( c( rep(TRUE,7), rep(FALSE,3) ) ) ?

标签: r vector


【解决方案1】:

像 Wimpel 和 Pkumar 的结合:

vector <- sample(c(rep(TRUE, 7), rep(FALSE, 3)), 10 ,replace = F)

【讨论】:

  • replace = FALSE bij 默认,size = n,也是默认的。所以这段代码比必要的要长..见?sample...
【解决方案2】:

如果你只是想打乱TRUEFALSE的位置,可以试试下面的代码

res <- (v <- c(rep(TRUE, 7), rep(FALSE, 3)))[sample(seq(v))]

其中sample(seq(v)) 生成从1length(v) 的随机位置

【讨论】:

    【解决方案3】:

    你可以试试这个:

    方法1: 使用prob 参数为您选择的样本以及样本命令中的replace=TRUE 提供比例。 sample 命令不保证准确的比例值,但是对于较大的样本量,它可能会给出近似的比例

    x <- c(TRUE, FALSE)
    sample(x,10 ,replace = TRUE, prob=c(.7, .3))
    

    方法二: 完美比例:

    rep(c(TRUE, FALSE), times= c(7,3)) ## In case you want to have perfect proportion
        #if someone wanted to randomly shuffle then one cas use:
         rep(c(TRUE, FALSE), times= c(7,3))[order(runif(10))]
    

    输出:

    > sample(x,10 ,replace = T, prob=c(.7, .3))
     [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
     [8]  TRUE  TRUE  TRUE
    

    输出:

    rep(c(TRUE, FALSE), times= c(7,3))[order(runif(10))]
      [1]  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE
      [8]  TRUE  TRUE FALSE
    

    【讨论】:

    • 这适用于 n=10 的小样本。有没有对大样本更可靠的解决方案(例如,n=1000,拆分必须准确)?
    • 有人应该解释一下否决票吗?这也将帮助我了解我的错误
    • 我没有投反对票,但 prob 分配的概率权重不是比例,所以这个答案在技术上不符合 OP 规定的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2011-01-12
    相关资源
    最近更新 更多