Вот способ с базой R -
df$c[sample(which(df$a > 25), sum(df$a > 25)/5)] <- 1
Имейте в виду, что это не удастся, если в df$a > 25
.
есть только 1 значение.
Подход, описанный ниже, ни в коем случае не потерпит неудачу, но он немного многословен. Не стесняйтесь использовать все, что вам больше подходит, в зависимости от ожидаемых значений в df$a
-
df$c[which(df$a > 25)[sample(length(which(df$a > 25)), sum(df$a > 25)/5)]] <- 1
Также обратите внимание, что, поскольку, relace = F
, образец size = sum(df$a > 25)/5
должен быть <= length(which(df$a > 25))
. Вы можете включить это условие в свой код, если хотите сделать его еще более безопасным.
Кроме того, не будет никаких изменений, если sum(df$a > 25)/5 < 1
, поэтому вы можете использовать size = max(sum(df$a > 25)/5, 1)
, если вы хотите по крайней мере 1 изменение.
Вот лучшая версия моей первой версии, благодаря @Frank -
df$c <- replace(df$c, sample(w <- which(df$a > 25), length(w)*.2), 1)