Как перейти из списка JSON в фрейм данных?

Я новичок в данных json и мне нужна помощь в распутывании данных во фрейме данных.

Строка (url) показывает, что это список, содержащий списки и фреймы данных. Я искал в Интернете, но не нашел простого решения проблемы.

library(jsonlite)

url <- fromJSON("http://data.ssb.no/api/v0/no/table/03886")

str(url)

Я хотел бы иметь это как фрейм данных, с которым я знаком.

 df<-as.data.frame(url)

person Dr. Flow    schedule 22.06.2016    source источник
comment
Используйте вывод str, чтобы понять структуру данных и построить нужные кадры данных. Из того, что я вижу, нет очевидного единого data.frames для создания, а 4 простых. Вы можете получить доступ к элементам списка с помощью оператора двойной скобки [[.   -  person asachet    schedule 22.06.2016
comment
Например, что-то вроде этого может создать список (называемый df_list) из 4 data.frames. Вы можете получить доступ к первому data.frame с помощью dfs_list[[1]]. df_list = list(); for(i in 1:4) {df_list[[tmp$variables$code[i]]] <- data.frame(val=tmp$variables$values[[i]], description=tmp$variables$valueTexts[[i]])}.   -  person asachet    schedule 22.06.2016


Ответы (1)


Учитывая, что структура JSON содержит вложенные ключ: значение и ключ: массивы, вы не можете получить простой data.frame непосредственно с вашими данными JSON. Вам нужно получить доступ к определенным компонентам и преобразовать их в data.frame

Например, в предоставленных вами данных мы видим, что url – это список

str(url)
# List of 2
# ...
# the two elements being
names(url)
# [1] "title"     "variables"

Таким образом, мы можем получить доступ к этим элементам

str(url$title)
# chr "Felte småvilt, etter region, småvilt og intervall (år)"
str(url$variables)
# 'data.frame': 4 obs. of  6 variables:
#   $ code       : chr  "Region" "Smaviltjakt" "ContentsCode" "Tid"
# $ text       : chr  "region" "småvilt" "statistikkvariabel" "intervall (år)"
# $ values     :List of 4
# ..$ : chr  "0" "01" "02" "03" ...
# ..$ : chr  "00" "01" "02" "03" ...
# ..$ : chr "Smaavilt"
# ..$ : chr  "1991-1992" "1992-1993" "1993-1994" "1994-1995" ...

Теперь вам нужно решить, какие конкретные компоненты данных вам нужны.

Заимствуя комментарий @antoine-sac, мы можем создать список из четырех data.frames:

df_list = list(); 
for(i in 1:4) {
    df_list[[url$variables$code[i]]] <- data.frame(val=url$variables$values[[i]], 
    description=url$variables$valueTexts[[i]])
}

Окончательно; вы должны научиться работать со списками, а не только с data.frames. Они важны в Р.

person SymbolixAU    schedule 29.06.2016