Dropout в R: случайным образом удалить элементы и заменить их на NA

Я хочу реализовать отсев, т.е. случайным образом заменить элементы на NA и вернуть вектор/список обратно со значениями NA.

Желаемый результат состоит в том, чтобы уменьшить переоснащение, поэтому для этого могут быть более удобные функции.

Подход 1

b<-rnorm(100); b[match(sample(b,10),b)] <- NA

где 10 значений заменены на NA.

Подход 2. как удалить 90% населения? Не работает, получаю меньше 90%:

b<-rnorm(99); b[match(sample(b,length(b)*0.9),b)] <- NA

это на самом деле не работает из-за возможных совпадений, т.е. выбора одного и того же элемента.

Есть ли встроенная или удобная функция для исключения?


person hhh    schedule 10.10.2018    source источник
comment
Функция is.na<- как в is.na(b) <- sample(length(b), 10).   -  person Rui Barradas    schedule 10.10.2018


Ответы (1)


Используйте функцию is.na<- для присвоения NA значений вектору.

set.seed(1)
b <- rnorm(100)
b[match(sample(b, 10), b)] <- NA

set.seed(1)
b2 <- rnorm(100)
is.na(b2) <- sample(length(b2), 10)

identical(b, b2)
#[1] TRUE

Чтобы реализовать удаление 90% населения с помощью NA, sample в зависимости от длины обрабатываемого вектора.

set.seed(1)
b <- rnorm(100)
is.na(b) <- sample(length(b), 0.9*length(b))
mean(is.na(b))
#[1] 0.9
person Rui Barradas    schedule 10.10.2018
comment
Как бы вы реализовали удаление 90% населения с NA? - person hhh; 10.10.2018