在 R 中为组的每个成员分配值的快速方法

Flo*_*lli 2 optimization loops r

我需要为组中的每个成员赋予权重。我做了以下循环来创建weights_ind向量(个体权重的向量),但我的循环太慢(2000 个人 2 秒):

# Data example
   n.group = 10
   n.tot = 1000
   groups = sample(1:10, n.tot, replace = TRUE)
   weights_by_group = rexp(n.group, rate = 1)


   weights_ind = rep(NA, n.tot)
     for(i in 1:n.tot){
     for(j in 1:n.group) {
     if(groups[i] == j) 
       weights_ind[i] = weights_by_group[j]
     }}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我可以使用哪个更快的功能?

Gre*_*gor 5

由于组从 1 开始编号,因此您可以使用groups向量来索引weights_by_group向量。

weights_ind = weights_by_group[groups]
Run Code Online (Sandbox Code Playgroud)

在我的计算机上,对于 2000 个人,这大约需要 10 微秒。

如果您的组不是数字,您可以weights_by_group使用组标识符命名向量,并仍然使用groupsto 索引:

groups = sample(letters[1:n.group], n.tot, replace = TRUE)
weights_by_group = rexp(n.group, rate = 1)
names(weights_by_group) = letters[1:n.group] 

weights_ind = weights_by_group[groups]
Run Code Online (Sandbox Code Playgroud)