Функция sample() в R позволяет вам брать случайную выборку элементов из набора данных или вектора с заменой или без нее.
Основной синтаксис функции sample() следующий:
образец (x, размер, заменить = FALSE , prob = NULL )
x : набор данных или вектор, из которого можно выбрать образец
size : размер образца
replace : должна ли выборка быть с заменой? (это ЛОЖЬ по умолчанию)
prob : вектор вероятностных весов для получения элементов выборочного вектора
Полную документацию по sample() можно найти здесь .
Следующие примеры иллюстрируют практические примеры использования sample().
Генерация выборки из вектора
Предположим, у нас есть вектор a с 10 элементами:
#define vector *a* with 10 elements in it
a <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Чтобы сгенерировать случайную выборку из 5 элементов из вектора a без замены, мы можем использовать следующий синтаксис:
#generate random sample of 5 elements from vector *a*
sample(a, 5)
#[1] 3 1 4 7 5
Важно отметить, что каждый раз, когда мы генерируем случайную выборку, вполне вероятно, что каждый раз мы будем получать разные наборы элементов.
#generate another random sample of 5 elements from vector *a*sample(a, 5)
#[1] 1 8 7 4 2
Если мы хотим иметь возможность воспроизвести наши результаты и каждый раз работать с одним и тем же образцом, мы можем использовать set.seed() .
#set.seed(some random number) to ensure that we get the same sample each time
set.seed(122)
#define vector *a* with 10 elements in it
a <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
#generate random sample of 5 elements from vector *a*sample(a, 5)
#[1] 10 9 2 1 4
#generate another random sample of 5 elements from vector *a*sample(a, 5)
#[1] 10 9 2 1 4
Мы также можем использовать аргумент replace = TRUE , чтобы производить выборку с заменой. Это означает, что каждый элемент вектора может быть выбран для включения в выборку более одного раза.
#generate random sample of 5 elements from vector *a* using sampling with replacement
sample(a, 5, replace = TRUE)
# 10 10 2 1 6
Генерация выборки из набора данных
Еще одно распространенное использование функции sample() — создание случайной выборки строк из набора данных. В следующем примере мы создадим случайную выборку из 10 строк из встроенного набора данных R iris , в котором всего 150 строк.
#view first 6 rows of iris dataset
head(iris)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
#set seed to ensure that this example is replicable
set.seed(100)
#choose a random vector of 10 elements from all 150 rows in iris dataset
sample_rows <- sample(1:nrow(iris), 10)
sample_rows
#[1] 47 39 82 9 69 71 117 53 78 25
#choose the 10 rows of the iris dataset that match the row numbers above
sample <- iris[sample_rows, ]
sample
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#47 5.1 3.8 1.6 0.2 setosa
#39 4.4 3.0 1.3 0.2 setosa
#82 5.5 2.4 3.7 1.0 versicolor
#9 4.4 2.9 1.4 0.2 setosa
#69 6.2 2.2 4.5 1.5 versicolor
#71 5.9 3.2 4.8 1.8 versicolor
#117 6.5 3.0 5.5 1.8 virginica
#53 6.9 3.1 4.9 1.5 versicolor
#78 6.7 3.0 5.0 1.7 versicolor
#25 4.8 3.4 1.9 0.2 setosa
Обратите внимание: если вы скопируете и вставите приведенный выше код в свою собственную консоль R, вы должны получить точно такой же образец, поскольку мы использовали set.seed(100) , чтобы каждый раз получать один и тот же образец.