Очень простой подход к созданию data.frame с несколькими выбросами:
# Create a vector with normally distributed values and a few outliers
# N - Number of random values
# n.out - number of outliers
my.rnorm <- function(N, num.out, mean=0, sd=1){
x <- rnorm(N, mean = mean, sd = sd)
ind <- sample(1:N, num.out, replace=FALSE )
x[ind] <- (abs(x[ind]) + 3*sd) * sign(x[ind])
x
}
N=60
num.out = 4
df <- data.frame( col1 = my.rnorm(N, num.out),
col2 = my.rnorm(N, num.out),
col3 = my.rnorm(N, num.out),
col4 = my.rnorm(N, num.out),
col5 = my.rnorm(N, num.out))
Обратите внимание, что я использовал mean=0
и sd=1
в качестве значений mean=1
, sd=0
, которые вы указали в комментариях, не имеет особого смысла.
Приведенный выше подход не гарантирует, что будет ровно 4 выброса. Их будет как минимум 4, но в некоторых редких случаях их может быть больше, поскольку функция rnorm()
не гарантирует, что она никогда не выдаст выбросы.
Еще одно замечание: data.frames не могут быть лучшими объектами для хранения числовых значений. Если все ваши 1000 data.frames являются числовыми, лучше хранить их в матрицах.
В зависимости от конечной цели и типа объекта, в котором хранятся ваши данные (список, дата.кадр или матрица), существуют более быстрые способы создания 1000 объектов, заполненных случайными значениями.