我已经使用this article中的逻辑查询了一个API,但是我被卡住了,我试图从API响应中提取数据的元素。
我希望从数据框中提取以下元素(address_1、address_2、license和issuer),但由于缺乏R方面的知识,我无法将数据设置为超出数据框的第一层。
我尝试了单方括号,双方括号,美元符号的多个排列,但我不能得到正确的语法。如果有人能帮我解决这个问题,我将不胜感激。
我希望将解析后的数据存储在类似于以下结构的数据帧中
Number address_1 address_2 license issuer
1154328938 7702 E PARHAM RD STE 304 0101052331 MEDICARE GROUP
我的代码如下所示:
library(tidyverse)
library(httr)
library(jsonlite)
path <- "https://npiregistry.cms.hhs.gov/api/?"
request <- GET(url = path,
query = list(
version = "2.0",
number = 1154328938
))
response <- content(request, as = "text", encoding = "UTF-8")
df <- fromJSON(response, flatten = TRUE) %>%
data.frame()
发布于 2020-04-29 23:53:27
它是一个嵌套列表,因此我们必须使用[[
或pluck
提取该列表
library(dplyr)
library(purrr)
df %>%
select(results.addresses) %>%
pluck(1, 1, 'address_1')
#[1] "7702 E PARHAM RD" "7702 E PARHAM RD"
如果我们检查str
,它会变得更加明显
str(select(df, results.addresses))
#'data.frame': 1 obs. of 1 variable:
# $ results.addresses:List of 1
# ..$ :'data.frame': 2 obs. of 10 variables:
#...
发布于 2020-04-30 02:06:19
您可以使用:
address <- df$results.addresses[[1]][c('address_1', 'address_2')]
address
# address_1 address_2
#1 7702 E PARHAM RD STE 304
#2 7702 E PARHAM RD STE 304
license <- df$results.taxonomies[[1]]['license']
license
# license
#1 0101052331
issuer <- df$results.identifiers[[1]]['issuer']
issuer
# issuer
#1 MEDICARE GROUP
类似地,使用dplyr::select
library(dplyr)
df %>%
select(results.addresses) %>% .[[1]] %>% .[[1]] %>%
select('address_1','address_2')
df %>%
select(results.taxonomies) %>% .[[1]] %>% .[[1]] %>%
select('license')
df %>%
select(results.identifiers) %>% .[[1]] %>% .[[1]] %>%
select('issuer')
发布于 2020-04-30 19:33:37
我想出来了,但可能不是很好。我发现unnest_wider做到了这一点。
library(tidyverse)
library(httr)
library(jsonlite)
library(purrr)
path <- "https://npiregistry.cms.hhs.gov/api/?"
request <- GET(url = path,
query = list(
version = "2.0",
number = 1154328938
))
response <- content(request, as = "text", encoding = "UTF-8")
df <- fromJSON(response, flatten = TRUE) %>%
data.frame()
providerData <- df %>%
select(results.number,
results.basic.name,
results.basic.gender,
results.basic.credential,
results.taxonomies) %>%
unnest_wider(results.taxonomies) %>%
rename(Provider_NPI = results.number,
Provider_Name = results.basic.name,
Provider_Gender = results.basic.gender,
Provider_Credentials = results.basic.credential,
Provider_Taxonomy = desc,
Provider_State = state) %>%
select(-code,-license,-primary)
https://stackoverflow.com/questions/61513596
复制