#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**
-
0.83790 0.08674 0.05524 0.02014
-
0.02184 0.88260 0.03368 0.06191
-
0.01093 0.03565 0.91000 0.04344
-
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 для перезаписи вышеупомянутой команды?» Поскольку мои данные так велики, время так важно для меня. Цикл занимает так много времени.