首页 > 解决方案 > 从 Eurostat 下载多个变量的数据

问题描述

我有一个variable_list和一个country_list我想下载数据的。我想自动化它,因为我不想自己推送每个下载。

我希望代码遍历variable_list,下载各自的数据country_list并将它们存储为"variable"_data. 我使用get_eurostat进行下载。

我试过了:

variable_list <- list("demo_r_d3area", "demo_r_d3dens", "demo_r_fagec")
country_list <- list("AT","BE","DK")
for (i in variable_list) {
  (assign(paste("data_", i, sep = ""), variable_list[[i]])) <- 
    get_eurostat(id = variable_list, time_format = "num", 
                 filters = list(geo = country_list))
}

但我不认为我正朝着正确的方向前进。

标签: r

解决方案


我相信读取数据的正确方法是lapply循环进入列表。

library(eurostat)

variable_list <- list("demo_r_d3area", "demo_r_d3dens", "demo_r_fagec")
country_list <- list("AT","BE","DK")

data_list <- lapply(variable_list, function(v){
  get_eurostat(
    id = v, 
    time_format = "num", 
    filters = list(geo = country_list)
  )
})

names(data_list) <- variable_list
str(data_list)
#List of 3
# $ demo_r_d3area: tibble [156 × 5] (S3: tbl_df/tbl/data.frame)
#  ..$ unit   : chr [1:156] "KM2" "KM2" "KM2" "KM2" ...
#  ..$ landuse: chr [1:156] "L0008" "L0008" "L0008" "L0008" ...
#  ..$ geo    : chr [1:156] "AT" "AT" "AT" "AT" ...
#  ..$ time   : num [1:156] 1990 1991 1992 1993 1994 ...
#  ..$ values : num [1:156] 82528 82528 82523 82518 82512 ...
# $ demo_r_d3dens: tibble [90 × 4] (S3: tbl_df/tbl/data.frame)
#  ..$ unit  : chr [1:90] "PER_KM2" "PER_KM2" "PER_KM2" "PER_KM2" ...
#  ..$ geo   : chr [1:90] "AT" "AT" "AT" "AT" ...
#  ..$ time  : num [1:90] 1990 1991 1992 1993 1994 ...
#  ..$ values: num [1:90] 93 94 95 95.8 96.2 96.3 96.5 96.6 96.7 96.9 ...
# $ demo_r_fagec : tibble [3,780 × 5] (S3: tbl_df/tbl/data.frame)
#  ..$ unit  : chr [1:3780] "NR" "NR" "NR" "NR" ...
#  ..$ age   : chr [1:3780] "TOTAL" "TOTAL" "TOTAL" "TOTAL" ...
#  ..$ geo   : chr [1:3780] "AT" "AT" "AT" "AT" ...
#  ..$ time  : num [1:3780] 1990 1991 1992 1993 1994 ...
#  ..$ values: int [1:3780] 90454 94629 95302 95227 92415 88669 88809 84045 81233 78138 ...

现在可以使用标准提取器运算符访问数据集。下面是一个访问的例子demo_r_d3area

head(data_list$demo_r_d3area)
## A tibble: 6 x 5
#  unit  landuse geo    time values
#  <chr> <chr>   <chr> <dbl>  <dbl>
#1 KM2   L0008   AT     1990 82528.
#2 KM2   L0008   AT     1991 82528.
#3 KM2   L0008   AT     1992 82523.
#4 KM2   L0008   AT     1993 82518.
#5 KM2   L0008   AT     1994 82512.
#6 KM2   L0008   AT     1995 82519.

推荐阅读