Как я могу случайным образом удалить один элемент из вектора, который удовлетворяет заданному условию?

#r #vector

#r #вектор

Вопрос:

Как я могу удалить только элемент из вектора в R? Например,

 x = c(1, 2, 0, 3, 1, 4, 2, 0)
  

Я хочу случайным образом удалить только один из нулей. Затем

 x = c(1, 2, 0, 3, 1, 4, 2)
  

или

 x = c(1, 2, 3, 1, 4, 2, 0)
  

Комментарии:

1. Я не понимаю, почему люди голосуют за закрытие, этот вопрос ясен.

Ответ №1:

Чтобы случайным образом выбрать, какой ноль удаляется, вы можете использовать

 x[-sample(which(x == 0), 1)]
  

Очевидно, что вышеописанное будет работать только в том случае, если в x есть хотя бы один ноль. В качестве гарантии вы можете использовать if() инструкцию.

 if(length(w <- which(x == 0))) x[-sample(w, 1)] else x
# [1] 1 2 0 3 1 4 2
if(length(w <- which(x == 0))) x[-sample(w, 1)] else x
# [1] 1 2 3 1 4 2 0
  

Выполняя поиск 11 там, где их нет, мы получаем весь вектор x обратно.

 if(length(w <- which(x == 11))) x[-sample(w, 1)] else x
# [1] 1 2 0 3 1 4 2 0