Я работаю с моделью BTYD для составления прогноза будущих транзакций клиента. К сожалению, из-за использования методов mcmc я не могу выполнить прогноз для всей моей базы клиентов (сотни тысяч), поэтому мне приходится разбивать базу на множество случайных выборок и выполнять несколько прогонов этой модели для каждой из них, чтобы получитьпрогноз.
Моя идея заключалась в том, чтобы использовать цикл для выполнения следующих действий:
- для получения случайной выборки длиной 10000 из всей базы (назовем этот фрейм данных «данными»). )
- сохранить результат в объекте с именем "sample1"
- Теперь мы должны вернуться к "данным" и исключить клиентов, которые находятся в "sample1", и сохранить новый результат в "данных"".
- получить новую случайную выборку (" sample2 ") из новых" data "
- создать новую версию" data ", исключая всех клиентов, включенных в" sample2 "(и" sample1 "").
- ... продолжайте этот цикл, пока мы не закончим базу и не создадим N выборок, которые содержат всю базу.
(Каждый идентификатор должен быть только в одной выборке).
к сожалению мойкажется, код работает не так, как я хочу (на данный момент я не очень хорошо разбираюсь с циклами.
getwd()
data<-read.csv("MOCK_DATA (1).csv")
# this is a fake dataset of 1000 rows that contains only 2 columns:
# customer ID (column name: "id") and a random number (column name "value").
# Every customer ID appears only once in the dataset.
head(data)
set.sample.size<-100
num.cycles<-ceiling(nrow(data)/set.sample.size)
for(i in 1:(num.cycles)) {
nam <- paste("sample_", i, sep = "")
assign(nam, data[sample(nrow(data), set.sample.size), ])
data<-data[!(data$id %in% nam$id),]
}
Этот код генерирует следующую ошибку: Ошибка в nam $ id: $ operator isнедопустимо для атомарных векторов
Я ожидаю получить 10 объектов с именем "sample_1" .. "sample_10", каждый из которых состоит из 100 случайных идентификаторов из исходных данных, но все уникальные (никакие идентификаторы не разделяются между 10образцы).