загрузить bigquery JSON дамп данных в R tibble - PullRequest
0 голосов
/ 14 апреля 2020

Я скачал JSON выдержку из Big Query, которая имеет вложенные и повторяющиеся поля (аналогично пакету bigrquery ) и пытаюсь дополнительно манипулировать полученным тиблом.

У меня есть следующий код для загрузки из JSON и преобразования в таблицу

library(tidyverse)
ga.list <- lapply(readLines("temp.json"), jsonlite::fromJSON, flatten = TRUE)
ga.df <- tibble(dat = ga.list) %>% 
    unnest_wider(dat) %>% 
    mutate(id = row_number()) %>%
         unnest_wider(b_nested) %>%
         unnest_wider(b3) %>% 
         unnest_wider(b33)

Таким образом, было два столбца списка:

  1. b_nested, это Столбец - это вложенный список (который я рекурсивно раскручивал ... может быть, есть более автоматизированный способ, , если так, пожалуйста, сообщите! )
  2. rr1 и rr2, эти столбцы всегда будут иметь одинаковые количество элементов. Поэтому элементы 1 из rr1 и rr2 следует читать вместе.

Я все еще работаю над тем, как извлечь id, rr1 и rr2 и превратить их в длинную таблицу с повторяющимися строками для каждой строки идентификатора.

Примечание: этот вопрос редактировался несколько раз, по мере того, как я продвигался дальше ... изначально я застрял, переводя его с JSON на тибл, пока не нашел unnest_wider()

temp. json:

{"a": "4000", "b_nested": {"b1": "(не установлено)", "b2": "some - текст», "b3": { "b31": "1591558980", "b32": "60259425255", "B33": { "b3311": "133997175"}, "b4": ложные}, "b5": правда }, "rr1": [], "rr2": []} {"a": "4000", "b_nested": {"b1": "asdfasdfa", "b2": "some - text more", " b3 ": {" b31 ":" 11111 "," b32 ":" 2222 "," b33 ": {" b3311 ":" 3333333 "}," b4 ": true}," b5 ": true}," rr1 ": [" v1 "," v2 "," v3 "]," rr2 ": [" x1 "," x2 "," x3 "]} {" a ":" 6000 "," b_nested ": {" b1 ":" asdfasdfa "," b2 ":" some - text more "," b3 ": {" b31 ":" 11111 "," b32 ":" 2222 "," b33 ": {" b3311 ":" 3333333 " }, "b4": истинно}, "b5": истинно}, "RR1": [ "v1", "V2", "V3", "v4", "v5"], "RR2": [ "aja1" "aja2", "aja3", "аджа 14 "," aja5 "]}

1 Ответ

1 голос
/ 14 апреля 2020

Последний кусок головоломки; чтобы получить повторяющиеся строки для повторяющейся записи

  ga.df %>% select(id, rr1, rr2)  %>%
  unnest(cols = c(rr1, rr2))

К вашему сведению: ссылка на большой запрос Указание вложенных и повторяющихся столбцов

Другое решение (мое предпочтение) будет создать тиббл из rr1 и rr1 и сохранить его в виде столбца в ga.df, чтобы можно было использовать функции purrr

    ga.df %>% 
  mutate(rr = map2(rr1, rr2, function(x,y) {
    tibble(rr1 = x, rr2 = y)
  })) %>%
  select(-rr1, -rr2) %>%
  mutate(rr_length = map_int(rr, ~nrow(.x)))
...