2015-03-05 4 views
0

Я хотел бы создать таблицу данных в форме 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 для моего текущего варианта использования. Решения для любого (или обоих!) Будут высоко оценены.

+0

Would что-то вроде 'е <- цитата (rgamma (периоды, shape = params [, «shape»], rate = params [, «rate»])); do.call (CJ, list (articleID = rownames (params), per = 1: периоды, спрос = e)) 'сделайте это? Я не совсем уверен, какой результат должен выглядеть как –

ответ

1

Это будет делать (обратите внимание, что это предполагает, что params отсортирован по именам строк, если вы не можете преобразовать его в data.table и слить два):

CJ(articleID=rownames(params), per=1:periods)[, 
    demand := rgamma(.N, shape=params[,"shape"], rate=params[,"rate"]), by = per] 
+0

спасибо большое! Очень приятно и быстро. – mondano

 Смежные вопросы

  • Нет связанных вопросов^_^