Как эффективно изменить коды R

#r

Вопрос:

У меня есть образец, созданный следующим образом:

     survival1a= data.frame(matrix(vector(), 50, 2,dimnames=list(c(), c("Id", "district"))),stringsAsFactors=F)


    survival1a$Id <- 1:nrow(survival1a)


    survival1a$district<- sample(1:4, size=50, replace=TRUE)
 

в этой выборке 50 человек из 4 разных районов.

У меня есть вероятности (матрица), которая показывает вероятность миграции из одного района в другой(Migdata) следующим образом:

район*** * * проб1***** * проб2*** * *** проб3****** проб4**

  1.      0.83790    0.08674      0.05524    0.02014
     
  2.      0.02184    0.88260      0.03368    0.06191
     
  3.      0.01093    0.03565      0.91000    0.04344
     
  4.      0.03338    0.06933      0.03644    0.86090
     

Я объединяю эти вероятности с моими данными с помощью этого кода:

     survival1a<-merge( Migdata,survival1a, by.x=c("district"), by.y=c("district"))
 

Я хотел бы знать к концу года, в каких районах проживает каждый человек, исходя из имеющихся у меня вероятностей миграции(Migdata).

Я уже написал код, который отлично работает, но с большими данными это отнимает так много времени, так как он основан на цикле:

 for (k in 1:nrow(survival1a)){
  survival1a$migration[k]<-sample(1:4, size=1,replace = TRUE,prob=survival1a[k,2:5])}
 

Теперь я хочу написать код таким образом, чтобы он не был основан на цикле и показывал район каждого человека к концу года.

Комментарии:

1. @akrun Это воспроизводимый пример из моих данных.

2. @Ronak Shah Это воспроизводимый пример из моих данных.

3. Я не думаю, что вы действительно можете избежать какой-то петли, так как вероятность для каждого человека разная. Вам нужно использовать for цикл или одну из apply команд.

4. @RonakShah Как я могу использовать команды apply для перезаписи вышеупомянутой команды?» Поскольку мои данные так велики, время так важно для меня. Цикл занимает так много времени.