Я извлекаю данные по конкретным географическим районам и конкретным показателям из агентства общественного здравоохранения в Великобритании, используя пакет, который они разработали для извлечения данных из их API, под названием fingertipsR
, а затем вставляю их в пустой список, гдесписок состоит из списков (географических регионов), которые содержат списки, представляющие каждый индикатор.
geog <- c("E38000220", "E38000046", "E38000144", "E38000191", "E38000210",
"E38000038", "E38000164", "E38000195", "E38000078", "E38000139",
"E38000166", "E38000211", "E38000147", "E38000183", "E38000028",
"E38000053", "E38000126", "E38000153", "E38000173", "E38000175"
)
indicators <- c(241, 92588, 90672, 90692, 90697, 90698, 90701, 90702, 91238,
90690, 90694, 93245, 93246, 93244, 93247, 93248, 93049, 93047,
90700)
## install.packages("fingertipsR"); library(fingertipsR)
library(dplyr)
list <- list()
start <- Sys.time()
for (geog_group in geog) {
for (indicator_number in indicators) {
list[[geog_group]][[as.character(indicator_number)]] <- fingertips_data(IndicatorID = indicator_number, AreaTypeID = c(152, 153, 154)) %>%
filter(AreaCode == geog_group, TimeperiodSortable == max(TimeperiodSortable)) %>%
select(Timeperiod, Value) %>% distinct()
}
}
end <- Sys.time()
end-start
На моем рабочем ноутбуке это занимает около 15 минут - мне интересно, есть ли какие-нибудь простые способы оптимизировать этот код- возможно с lapply
или purrr
?
Редактировать: в идеале я хочу, чтобы индикаторы для каждой географической области были в одном фрейме данных, так как все они имеют одинаковые столбцы Time period
и Value
-Я собирался разобраться с этим после unlist()
или чего-то подобного - но если у кого-то есть способы решить это внутри цикла for, я открыт для предложений.