Использование jsonlite для многоуровневых вложенных списков и API NASA в R - PullRequest
0 голосов
/ 21 января 2020

Используя API НАСА для получения информации о погоде на Марсе, я получаю список списков. В python pandas прекрасно справляется с форматированием данных; тем не менее, я должен закодировать API в R.

enter image description here

Так структурируются данные в R даже после использования функции fromJSON(x, flatten = TRUE) в jsonlite .

enter image description here

Я бы хотел структурировать необработанные данные так, чтобы они походили на таблицу pandas.

Вот мой API код:

library(httr)
library(jsonlite)
req <- "https://api.nasa.gov/insight_weather/?api_key=&feedtype=json&ver=1.0"
response <-  GET(req)
response <- content(response, as="text") 
mars <- fromJSON(response, flatten = TRUE)

1 Ответ

0 голосов
/ 21 января 2020

По запросу API возвращается больше информации, чем показано на скриншоте таблицы, но я сосредоточился на том, чтобы просто вернуть таблицу, аналогичную структуре примера. Если вам нужна дополнительная информация, такая как направление ветра, она имеет другую структуру и может быть проще разобрать по отдельности и объединить.

library(jsonlite)
library(purrr)
library(dplyr)
library(tidyr)

req <- "https://api.nasa.gov/insight_weather/?api_key=DEMO_KEY&feedtype=json&ver=1.0"
mars <- fromJSON(req)

map(mars[1:7], ~unlist(.x[1:6]) %>%
      bind_rows) %>%
  bind_rows(.id = "day") %>%
  pivot_longer(cols = grep("\\.", names(.)), names_sep = "\\.", names_to = c(".value", "var"))

# A tibble: 28 x 8
   day   First_UTC            Last_UTC             Season var   AT       HWS    PRE     
   <chr> <chr>                <chr>                <chr>  <chr> <chr>    <chr>  <chr>   
 1 402   2020-01-13T06:24:59Z 2020-01-14T07:04:33Z summer av    -65.475  5.364  637.752 
 2 402   2020-01-13T06:24:59Z 2020-01-14T07:04:33Z summer ct    178174   79226  89083   
 3 402   2020-01-13T06:24:59Z 2020-01-14T07:04:33Z summer mn    -100.044 0.236  618.015 
 4 402   2020-01-13T06:24:59Z 2020-01-14T07:04:33Z summer mx    -16.815  21.146 653.7326
 5 403   2020-01-14T07:04:34Z 2020-01-15T07:44:08Z summer av    -62.449  5.683  636.87  
 6 403   2020-01-14T07:04:34Z 2020-01-15T07:44:08Z summer ct    211897   95539  105800  
 7 403   2020-01-14T07:04:34Z 2020-01-15T07:44:08Z summer mn    -101.272 0.205  618.1757
 8 403   2020-01-14T07:04:34Z 2020-01-15T07:44:08Z summer mx    -16.931  20.986 653.4973
 9 404   2020-01-15T07:44:09Z 2020-01-16T08:23:44Z summer av    -63.622  5.303  636.148 
10 404   2020-01-15T07:44:09Z 2020-01-16T08:23:44Z summer ct    293286   132690 158958
# … with 18 more rows
...