У меня есть набор данных, который выглядит следующим образом один:Увеличение скорости с rbindlist не работает с двумя петлями для
test <- data.table(Weight=sample(x = c(20:100),500,replace = T),y=rnorm(500),z=rnorm(500))
> head(test)
Weight y z
1: 87 -0.7946846 -0.03136408
2: 97 1.6570765 0.61080309
3: 80 1.1592073 -0.09389739
4: 23 -0.0268602 -1.36896141
5: 32 1.3171078 -2.19978789
6: 78 -0.1961162 0.62026338
Я хочу, чтобы дублировать каждую строку столько раз, сколько значения при weight.I достигли этого со следующим кодом: (я включил прогрессбар)
system.time(
for (i in 1:nrow(test)){
setTxtProgressBar(pb,i)
for (j in 1:test[i,]$Weight){
Testoutcome <- rbind(Testoutcome, test[i,])
}
})
user system elapsed
32.91 0.08 33.57
Я нашел пост here, который объясняет, что rbindlist гораздо быстрее, чем rbind. Поэтому я изменил код следующим образом:
system.time(
for (i in 1:nrow(test)){
setTxtProgressBar(pb,i)
for (j in 1:test[i,]$Weight){
Testoutcome <- rbindlist(list(Testoutcome, test[i,]))
}
})
user system elapsed
27.72 0.05 28.31
Так что, похоже, это не так эффективно. Мой фактический набор данных примерно в 1.000 раз больше, и запрос берется навсегда ... Любые идеи о том, как ускорить работу? Может быть, я должен получить привязку за пределами цикла?
Это может иметь значение: http://stats.stackexchange.com/questions/25148/how-to-expand-data-frame-in -r – Frank
Ах, и вот точное совпадение, хотя он не спрашивает о скорости: http://stackoverflow.com/questions/19518728/r-replicate-each-row-of-an-r-data-frame- и-define-of-of-replications – Frank