Я изо всех сил пытаюсь создать data.frame случайных выборок. Привожу воспроизводимый пример:
У меня есть несколько пользовательских функций, подобных этой:
vendorSelector <- function() {
sample(c("Paco", "Juan", "Alex", "Marc"), 1)
}
productSelector <- function() {
sample(c("Water", "Oil", "Carbon", "Wood"), 1)
}
Мне удалось создать фрейм данных вручную, сделав это:
data <- data.frame(Vendor = vendorSelector(), Product = productSelector(),
stringsAsFactors = FALSE)
А затем повторяя вручную эту строку кода:
data <- rbind(data, c(Vendor = vendorSelector(), Product = productSelector()))
Моя проблема в том, что я хочу сгенерировать data.frame из 1000 строк, и я не хочу запускать вручную 999 раз блок rbind для его достижения. Можете ли вы помочь мне придумать какой-то цикл или пользовательскую функцию для ее достижения? Спасибо.
Вы можете изменить свои функции, включив параметр, а затем сэмплировать n наблюдений:
productSelector <- function(n) {
sample(c("Water", "Oil", "Carbon", "Wood"), n, replace = T)
}
vendorSelector <- function(n) {
sample(c("Paco", "Juan", "Alex", "Marc"), n, replace = T)
}
data <- data.frame(Vendor = vendorSelector(10), Product = productSelector(10),
stringsAsFactors = FALSE)
data
Vendor Product
1 Paco Oil
2 Paco Carbon
3 Juan Oil
4 Paco Oil
5 Marc Carbon
6 Juan Oil
7 Juan Carbon
8 Juan Wood
9 Alex Oil
10 Paco Wood
напрямую сэмплировать 1000 строк за один раз, вам нужно установить replace=T
, так как количество выбранных элементов больше, чем исходный набор элементов.
data.frame(Vendor = sample(c("Paco", "Juan", "Alex", "Marc"), 1000, replace=T), Product = sample(c("Water", "Oil", "Carbon", "Wood"), 1000, replace=T),
stringsAsFactors = FALSE)
Спасибо, ваш подход к решению дал мне идею продолжить мой проект данных, а также решил проблему, с которой я столкнулся!