Как создать случайный логический вектор с указанными c номерами TRUE / FALSE записей - PullRequest
0 голосов
/ 19 февраля 2020

Я хотел бы создать логический вектор, который имеет 10 строк, причем каждой строке случайным образом присваивается значение ИСТИНА или ЛОЖЬ. Однако я хочу, чтобы было только 3 FALSE и 7 TRUE.

Пример желаемого результата (логический вектор с тремя случайно назначенными записями FALSE и 7 случайно назначенными записями TRUE):

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

Я могу создать логический вектор размером 10, который имеет значение ИСТИНА или ЛОЖЬ, но я не знаю, как указать, что я хочу три записи ЛОЖЬ и 7 записей ИСТИНА.

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

Это приводит к:

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

с неправильным количеством записей ИСТИНА и ЛОЖЬ (4 ИСТИНА и 6 ЛОЖЬ).

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Как Вимпел и ПКумар вместе взятые:

vector <- sample(c(rep(TRUE, 7), rep(FALSE, 3)), 10 ,replace = F)
1 голос
/ 19 февраля 2020

Если вы просто хотите перетасовать позиции TRUE и FALSE, вы можете попробовать код ниже

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

, где sample(seq(v)) генерирует случайные позиции от 1 до length(v)

1 голос
/ 19 февраля 2020

Вы можете попробовать это:

Approach1: Используйте параметр prob, чтобы задать пропорции для выборки, которую вы выбираете вместе с replace=TRUE в команде выборки. Команда sample не гарантирует точное значение пропорции, но при увеличении размера выборки она может дать приблизительные пропорции

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

Подход 2: Для идеальной пропорции:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...