У меня есть набор данных, который содержит следующие идентификаторы: rscore, gvkey, sic2, year и cdom. Что я собираюсь сделать, так это рассчитать процентные ранги на основе суммированных rscore для всех временных интервалов (~ 1500) для данного gvkey, а затем вычислить процентные ранги в заданном временном интервале и sic2 на основе gvkey.
Вычисление процентилей для всех временных интервалов — довольно быстрый процесс, однако, как только я добавлю в вычисление рангов процентилей sic2, это будет довольно медленно, но мы, вероятно, рассматриваем в общей сложности около ~ 65 000 подмножеств. Меня интересует, есть ли возможность ускорить этот процесс.
Данные для одного временного интервала выглядят следующим образом.
gvkey sic2 cdom rscoreSum pct
1187 10 USA 8.00E-02 0.942268617
1265 10 USA -1.98E-01 0.142334654
1266 10 USA 4.97E-02 0.88565478
1464 10 USA -1.56E-02 0.445748247
1484 10 USA 1.40E-01 0.979807985
1856 10 USA -2.23E-02 0.398252565
1867 10 USA 4.69E-02 0.8791019
2047 10 USA -5.00E-02 0.286701209
2099 10 USA -1.78E-02 0.430915371
2127 10 USA -4.24E-02 0.309255308
2187 10 USA 5.07E-02 0.893020421
Код для расчета отраслевых рейтингов приведен ниже и довольно прост.
#generate 2 digit industry SICs percentile ranks
dout <- ddply(dfSum, .(sic2), function(x){
indPct <- rank(x$rscoreSum)/nrow(x)
gvkey <- x$gvkey
x <- data.frame(gvkey, indPct)
})
#merge 2 digit industry SIC percentile ranks with market percentile ranks
dfSum <- merge(dfSum, dout, by = "gvkey")
names(dfSum)[2] <- 'sic2'
Будем признательны за любые предложения по ускорению процесса!