【发布时间】:2020-12-13 10:49:41
【问题描述】:
我正在使用来自Nobel prize API的数据
library(httr)
url = "http://api.nobelprize.org/v1/prize.json"
resp = GET(url, query = list(category = "economics", year = 2000, yearTo = 2019))
结构如下
str(content(resp))
>List of 1
> $ prizes:List of 51
> ..$ :List of 3
> .. ..$ year : chr "2019"
> .. ..$ category : chr "economics"
> .. ..$ laureates:List of 3
> .. .. ..$ :List of 5
> .. .. .. ..$ id : chr "982"
> .. .. .. ..$ firstname : chr "Abhijit"
> .. .. .. ..$ surname : chr "Banerjee"
> .. .. .. ..$ motivation: chr "\"for their experimental approach to alleviating global poverty\""
> .. .. .. ..$ share : chr "3"
...
我想将 year 和 id 排序到同一个数据框中。请注意,每年可能有一位或多位诺贝尔奖获得者。
我知道如何使用嵌套的 for 循环来做到这一点
laureates <- data.frame(year = NA, id = NA)
for(i in 1:length(content(resp)$prizes)){
year <- content(resp)$prizes[[i]][["year"]]
for(k in 1:length(content(resp)$prizes[[i]]$laureates) ){
id <- content(resp)$prizes[[i]]$laureates[[k]][["id"]]
laureates[nrow(laureates)+1, c("year", "id")] <- c(year, id)
}
}
head(laureates[-1, ])
但我不知道如何使用 purrr 包中的地图功能以“tidyverse”方式执行此操作。我来的“最近”是
laureates <- map_df(content(resp)$prizes, ~data.frame(year = .x[["year"]], id = map(.x$laureates, ~.x[["id"]]) ))
【问题讨论】: