:) Привет всем
да, я знаю, что уже есть несколько советов и приемов, как эффективно строить ряд за строкой, но мой цикл for все еще медленный. Может быть, для одного из вас очевидно, как это ускорить / почему это так медленно.
Как вы можете видеть, я уже преобразовал его в список, следуя инструкциям: Построение кадра данных R строка за строкой , но это не делает его намного быстрее, чем rbind.
index = 1
for (i in 1:nrow(predictionDf)) {
startDate = predictionDf$ApropYMD[i]
amountPerMonth = (predictionDf$PredictionExp[i]/12)
amountPerMonthMax = (predictionDf$PredictionMax[i]/12)
print(i)
for (j in 1:12) {
plotDf[index, ] = list(ApropYMD=startDate, AmountExp = amountPerMonth, AmountMax = amountPerMonthMax)
month(startDate) <- month(startDate) + 1
index = index + 1
}
}
Я тоже попробовал, это немного быстрее
plotDf = data.frame("ApropYMD" = c(seq(firstDayNextMonth, highestDate, by="months")))
plotDf$AmountExp = 0
plotDf$AmountMax = 0
for (i in 1:nrow(tmpPredictionDf)) {
startDate = tmpPredictionDf$ApropYMD[i]
amountPerMonth = (tmpPredictionDf$PredictionExp[i]/12)
amountPerMonthMax = (tmpPredictionDf$PredictionMax[i]/12)
print(i)
for (j in 1:12) {
plotDf$AmountExp[which(plotDf$ApropYMD == startDate)] = plotDf$AmountExp[which(plotDf$ApropYMD == startDate)] + amountPerMonth
plotDf$AmountMax[which(plotDf$ApropYMD == startDate)] = plotDf$AmountMax[which(plotDf$ApropYMD == startDate)] + amountPerMonthMax
month(startDate) <- month(startDate) + 1
}
Я хочу распределить количество на одну дату в течение следующих 12 месяцев для каждой из ~ 5,500 строк -> 5,500 * 12 = 66 000 вставок строк
Input
ApropYMD AmountExp AmountMax
2019-01-01 6000 12000
Output
ApropYMD AmountExp AmountMax
2019-01-01 500 1000
2019-01-02 500 1000
2019-01-03 500 1000
2019-01-04 500 1000
2019-01-05 500 1000
2019-01-06 500 1000
2019-01-07 500 1000
2019-01-08 500 1000
2019-01-09 500 1000
2019-01-10 500 1000
2019-01-11 500 1000
2019-01-12 500 1000