【发布时间】:2019-07-25 11:57:33
【问题描述】:
我有一个data.table,我想为它添加基于一列的随机二项式列作为试验次数和基于其他列的多个概率:
require(data.table)
DT = data.table(
ID = letters[sample.int(26,10, replace = T)],
Quantity=as.integer(100*runif(10))
)
prob.vecs <- LETTERS[1:5]
DT[,(prob.vecs):=0]
set.seed(123)
DT[,(prob.vecs):=lapply(.SD, function(x){runif(.N,0,0.2)}), .SDcols=prob.vecs]
DT
ID Quantity A B C D E
1: b 66 0.05751550 0.191366669 0.17790786 0.192604847 0.02856000
2: l 9 0.15766103 0.090666831 0.13856068 0.180459809 0.08290927
3: u 38 0.08179538 0.135514127 0.12810136 0.138141056 0.08274487
4: d 27 0.17660348 0.114526680 0.19885396 0.159093484 0.07376909
5: o 81 0.18809346 0.020584937 0.13114116 0.004922737 0.03048895
6: f 44 0.00911130 0.179964994 0.14170609 0.095559194 0.02776121
7: d 81 0.10562110 0.049217547 0.10881320 0.151691908 0.04660682
8: t 81 0.17848381 0.008411907 0.11882840 0.043281587 0.09319249
9: x 79 0.11028700 0.065584144 0.05783195 0.063636202 0.05319453
10: j 43 0.09132295 0.190900730 0.02942273 0.046325157 0.17156554
现在我想添加五列Quantity_AQuantity_BQuantity_CQuantity_DQuantity_E
将rbinom 与第二列中的相应概率和数量一起应用。
例如,Quantity_A 的第一个条目是:
set.seed(741)
sum(rbinom(66,1,0.05751550))
> 2
这个问题似乎与这篇文章非常相似:How do I pass column-specific arguments to lapply in data.table .SD? 但我似乎无法让它工作。我的尝试:
DT[,(paste0("Quantity_", prob.vecs)):= mapply(function(x, Quantity){sum(rbinom(Quantity, 1 , x))}, .SD), .SDcols = prob.vecs]
rbinom 中的错误(数量,1,x): 缺少参数“数量”,没有默认值
有什么想法吗?
【问题讨论】:
标签: r data.table mapply