Я хотел бы создать таблицу данных в форме tidy, содержащей столбцы articleID, период и спрос (с идентификатором изделия и периодом как ключ). Требование подчиняется случайной функции с входными данными из другого data.frame (params). Он создается во время выполнения для различного количества периодов.R: создать data.table с периодической функцией
Это легко сделать это в «не-кругленькую» форме:
#example data
params <- data.frame(shape=runif(10), rate=runif(10)*2)
rownames(params) <- letters[1:10]
periods <- 10
# create non-tidy data with one column for each period
df <- replicate(nrow(params),
rgamma(periods,shape=params[,"shape"], rate=params[,"rate"]))
rownames(df) <- rownames(params)
Есть «аккуратный» способ сделать это творение? Мне нужно было бы повторить rgamma(), но я не уверен, как заставить его использовать параметры соответствующей статьи. Я попытался начать с Крестом Присоединяйтесь от data.table:
dt <- CJ(articleID=rownames(params), per=1:periods, demand=0)
, но я не знаю, как передать rgamma к сИ [, спрос] непосредственно и правильно при создании, ни как изменить значение теперь без используя некоторые уродливые для цикла. Я также рассмотрел использование gather() из пакета tidyr, но, насколько я могу судить, мне нужно будет использовать цикл for.
Для меня не имеет значения, использую ли я data.frame или data.table для моего текущего варианта использования. Решения для любого (или обоих!) Будут высоко оценены.
Would что-то вроде 'е <- цитата (rgamma (периоды, shape = params [, «shape»], rate = params [, «rate»])); do.call (CJ, list (articleID = rownames (params), per = 1: периоды, спрос = e)) 'сделайте это? Я не совсем уверен, какой результат должен выглядеть как –