【发布时间】:2020-04-18 22:53:06
【问题描述】:
我使用 Google Geocoding API 来请求数千个地址的位置数据。每个请求的内容都被解析为一个列表。结果列表已添加到“get_response”列下。
我在使用 purrr 包从这些列表中提取单个属性时遇到很大困难,希望各位优秀的人能提供帮助。
library(tidyverse)
#> Warning: package 'tidyverse' was built under R version 3.5.3
l1 <- list(results = list(list(geometry = list(location = list(lat = 41.9, lng = -87.6)))), status = "OK")
l2 <- list(results = list(list(geometry = list(location = list(lat = 35.1, lng = -70.6)))), status = "OK")
starting_df <- tribble(~name, ~get_response,
"first_location", l1,
"second_location", l2)
print(starting_df)
#> # A tibble: 2 x 2
#> name get_response
#> <chr> <list>
#> 1 first_location <named list [2]>
#> 2 second_location <named list [2]>
下面我将演示如何一次提取一个属性:
pluck(starting_df[1,]$get_response, 1, "results", 1, "geometry", "location", "lat")
#> [1] 41.9
pluck(starting_df[2,]$get_response, 1, "results", 1, "geometry", "location", "lat")
#> [1] 35.1
这是我想要的输出:
desired_output <- tribble(~name, ~get_response, ~lat,
"first_location", l1, 41.9,
"second_location", l2, 35.1)
print(desired_output)
#> # A tibble: 2 x 3
#> name get_response lat
#> <chr> <list> <dbl>
#> 1 first_location <named list [2]> 41.9
#> 2 second_location <named list [2]> 35.1
这是我尝试使用 purrr::map
new_df <- mutate(starting_df, lat = map(get_response, pluck(1, "results", 1, "geometry", "location", "lat")))
#> Error: Can't convert NULL to function
由reprex package (v0.3.0) 于 2020-04-18 创建
有谁知道这样做的好方法吗?
【问题讨论】: