У меня проблемы с анализом ответа команды GET на то, что я хочу.Цель состоит в том, чтобы получить фрейм данных со столбцом для каждого из столбцов, которые возвращает GET.Код для генерации ответа приведен ниже, за исключением отсутствующего значения для wosliteKey
.Данные ответа в форме RDS: здесь .Это файл 16 КБ.Я попытался dput
, но он слишком большой для вставки в эту текстовую область.
count <- 100
url <- 'https://api.clarivate.com/api/woslite/'
query <- 'ts=(land AND ocean AND climate AND change AND food security) AND PY=2013-2019'
response <- httr::GET(url, httr::add_headers(accept = 'application/json', `X-APIKey` = wosliteKey), query = list(databaseId = 'WOK', usrQuery = query, count = count, firstRecord = firstRecord))
Я преобразовываю ответ в файл типа json, используя следующие две команды
jsonRespText <- content(response, "text")
j <- fromJSON(jsonRespText)
Это приводит кв кадре данных с некоторыми сложными элементами.Вот вывод из str(j, max.level = 3)
.Некоторые из элементов данных являются вложенными фреймами данных, столбцы которых являются списками.
Я хочу, чтобы все столбцы вложенных фреймов данных были столбцами в одном фрейме данных.Все столбцы являются символьными.
Используя jData <- as.data.table(flatten(j$Data))
, я получаю таблицу данных из 27 столбцов.Но каждый столбец - это список.
List of 2
$ QueryResult:List of 3
..$ QueryID : int 2
..$ RecordsSearched: int 71811425
..$ RecordsFound : int 66
$ Data :'data.frame': 66 obs. of 7 variables:
..$ Keyword:'data.frame': 66 obs. of 1 variable:
.. ..$ Keywords:List of 66
..$ Title :'data.frame': 66 obs. of 1 variable:
.. ..$ Title:List of 66
..$ Doctype:'data.frame': 66 obs. of 1 variable:
.. ..$ Doctype:List of 66
..$ Author :'data.frame': 66 obs. of 2 variables:
.. ..$ Authors :List of 66
.. ..$ BookGroupAuthors:List of 66
..$ Source :'data.frame': 66 obs. of 9 variables:
.. ..$ Pages :List of 66
.. ..$ SupplementNumber :List of 66
.. ..$ SourceTitle :List of 66
.. ..$ SpecialIssue :List of 66
.. ..$ Volume :List of 66
.. ..$ Published.BiblioDate:List of 66
.. ..$ Published.BiblioYear:List of 66
.. ..$ Issue :List of 66
.. ..$ BookSeriesTitle :List of 66
..$ UT : chr [1:66] "WOS:000317372700003" "WOS:000367881500035" "WOS:000399397700046" "WOS:000419351000013" ...
..$ Other :'data.frame': 66 obs. of 12 variables:
.. ..$ Identifier.Eissn :List of 66
.. ..$ Contributor.ResearcherID.Names :List of 66
.. ..$ Contributor.ResearcherID.ResearcherIDs:List of 66
.. ..$ Identifier.Doi :List of 66
.. ..$ Identifier.Issn :List of 66
.. ..$ ResearcherID.Disclaimer :List of 66
.. ..$ Identifier.Ids :List of 66
.. ..$ Identifier.article_no :List of 66
.. ..$ Identifier.Eisbn :List of 66
.. ..$ Identifier.Isbn :List of 66
.. ..$ Identifier.Parent_Book_Doi :List of 66
.. ..$ Identifier.Xref_Doi :List of 66
Я могу преобразовать эти списки в столбцы символов с помощью
jData[, ] <- lapply(jData[, ], as.character)
, но я нервничаю, что, возможно, что-то теряю по пути.Есть ли лучший способ сделать это?