Быстрый способ присвоения значения каждому члену группы в R - PullRequest
2 голосов
/ 06 января 2020

Мне нужно приписать вес каждому члену группы. Я сделал следующее l oop, чтобы создать вектор weights_ind (вектор индивидуальных весов), но мой l oop слишком медленный (2 секунды для 2000 человек):

# 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]
     }}

Какой можно ли использовать более быструю функцию в моем случае?

1 Ответ

5 голосов
/ 06 января 2020

Поскольку группы нумеруются, начиная с 1, вы можете использовать вектор groups для индексации вектора weights_by_group.

weights_ind = weights_by_group[groups]

На моем компьютере, для отдельного пользователя 2000, это занимает около 10 микросекунд .

Если бы ваши группы не были числительными c, вы могли бы назвать вектор 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...