【问题标题】:Map function to sort JSON into data frame (with nested lists)将 JSON 排序为数据框的映射函数(带有嵌套列表)
【发布时间】: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"]]) ))

【问题讨论】:

    标签: r tidyverse purrr


    【解决方案1】:

    使用purrr,您可以这样做:

    library(purrr)
    
    tmp <- content(resp)$prizes
    result <- map_df(tmp, function(x) 
                        data.frame(year = x$year, 
                                   id  = map_chr(x$laureates, `[[`, 'id')))
    

    或者在基础 R 中:

    result <- do.call(rbind, lapply(tmp, function(x) 
                    data.frame(year =  x$year, 
                               id = sapply(x$laureates, `[[`, 'id'))))
    

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 2018-04-17
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2012-09-24
      • 2023-03-19
      相关资源
      最近更新 更多