【问题标题】:Quick way for assigning a value to each member of a group in RR中为组的每个成员分配值的快速方法
【发布时间】:2020-04-24 05:37:30
【问题描述】:

我需要为组中的每个成员分配一个权重。 我已经创建了以下循环来创建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]
     }}

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

【问题讨论】:

    标签: r loops optimization


    【解决方案1】:

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

    weights_ind = weights_by_group[groups]
    

    在我的电脑上,对于 2000 个人来说,这大约需要 10 微秒。

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

    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]
    

    【讨论】:

    • 完美。这正是我所需要的。非常感谢,新年快乐
    猜你喜欢
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2017-06-06
    • 2014-08-30
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多