Ваш sample(0:3, 1)
перерабатывается, как и ваш 0
... он не запускается повторно каждый раз, когда это необходимо. Вам необходимо предварительно сгенерировать все замены, чтобы их можно было использовать при необходимости. Сделайте следующее:
ifelse(vec1 %in% c(2, 3), sample(0:3, size = length(vec1), replace = TRUE), 0)
Мне также нравится vec1 %in% c(2, 3)
больше, чем vec1 == 2 | vec1 == 3
, потому что он лучше масштабируется ... если у вас было больше двух возможностей, %in%
легко добавить, но == | == | ==
быстро стареет.
С другой стороны, если вы заботитесь о скорости / эффективности, это будет быстрее:
to_replace = which(vec1 %in% c(2, 3))
vec1[to_replace] = sample(0:3, size = length(to_replace), replace = TRUE)