R:用周期函数创建data.table
R: create data.table with periodic function
我想在 tidy 表单中创建一个 data.table,其中包含 articleID、period 和 demand 列(以 articleID 和 period 作为键)。需求受随机函数的影响,输入数据来自另一个 data.frame (params)。它是在运行时为不同的周期数创建的。
在 "non-tidy" 形式中很容易做到这一点:
#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)
是否有 "tidy" 方法来进行此创作?我需要复制 rgamma(),但我不确定如何让它使用相应文章的参数。我尝试从 data.table:
的 Cross Join 开始
dt <- CJ(articleID=rownames(params), per=1:periods, demand=0)
但我不知道如何在创建时将 rgamma 直接正确地传递给 dt[demand],也不知道如何在不使用一些丑陋的 for 循环的情况下立即更改值。我还考虑过使用 tidyr 包中的 gather(),但据我所知,我也需要使用 for 循环。
对于我当前的用例,我使用 data.frame 还是 data.table 并不重要。任何(或两者!)的解决方案将不胜感激。
这就可以了(请注意,它假定 params
按行名排序,如果不是,您可以将其转换为 data.table
并将两者合并):
CJ(articleID=rownames(params), per=1:periods)[,
demand := rgamma(.N, shape=params[,"shape"], rate=params[,"rate"]), by = per]
我想在 tidy 表单中创建一个 data.table,其中包含 articleID、period 和 demand 列(以 articleID 和 period 作为键)。需求受随机函数的影响,输入数据来自另一个 data.frame (params)。它是在运行时为不同的周期数创建的。
在 "non-tidy" 形式中很容易做到这一点:
#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)
是否有 "tidy" 方法来进行此创作?我需要复制 rgamma(),但我不确定如何让它使用相应文章的参数。我尝试从 data.table:
的 Cross Join 开始dt <- CJ(articleID=rownames(params), per=1:periods, demand=0)
但我不知道如何在创建时将 rgamma 直接正确地传递给 dt[demand],也不知道如何在不使用一些丑陋的 for 循环的情况下立即更改值。我还考虑过使用 tidyr 包中的 gather(),但据我所知,我也需要使用 for 循环。
对于我当前的用例,我使用 data.frame 还是 data.table 并不重要。任何(或两者!)的解决方案将不胜感激。
这就可以了(请注意,它假定 params
按行名排序,如果不是,您可以将其转换为 data.table
并将两者合并):
CJ(articleID=rownames(params), per=1:periods)[,
demand := rgamma(.N, shape=params[,"shape"], rate=params[,"rate"]), by = per]