Разобрать httr GET ответ в один фрейм данных - PullRequest
0 голосов
/ 11 мая 2019

У меня проблемы с анализом ответа команды 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)

, но я нервничаю, что, возможно, что-то теряю по пути.Есть ли лучший способ сделать это?

...