我正在从英国的公共卫生机构提取特定地理区域和特定指标的数据,使用他们为从他们的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循环中解决这个问题,我愿意接受建议。