Ошибки с фреймами данных от json и xml - PullRequest
0 голосов
/ 21 февраля 2020

Мне нужен фрейм данных из файлов json или xml (данные доступны в обоих форматах здесь ). Тем не менее, я получаю ошибки, когда пытаюсь получить эти фреймы данных в R.

С файлом json, ошибка заключается в следующем тексте

Ошибка в parse_con ( txt, bigint_as_char): лексическая ошибка: неверные байты в строке UTF8. stion ":" 0 "," name_question ":" Óðî ÷ èñòå çàñ³äàííÿ Âåðõîâíî¿ Ðàä (прямо здесь) ------ ^

с xml файлом, ошибка это как

Ошибка в [<-.data.frame (*tmp*, i, имена (узлы [[i]])), значение = c (date_agenda = "27112014",: дубликаты подписок для столбцов

Используемые команды:

library(jsonlite)
library(XML)

k <- fromJSON("https://data.rada.gov.ua/ogd/zal/ppz/skl8/dict/agendas_8_skl.json", encoding = "UTF-8")
m <- xmlToDataFrame("agendas_8_skl.xml") 

Перед выполнением команд я загружаю файлы в рабочий каталог.

Я не понимаю, как я могу получить данные. Пожалуйста, помогите!

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Этот ответ основан на ответе @ user2554330 здесь

library(jsonlite)
library(RCurl) 
#Incase you have locale different than ukrainian
Sys.setlocale("LC_CTYPE", "ukrainian")
k <- fromJSON(getURL("https://data.rada.gov.ua/ogd/zal/ppz/skl8/dict/agendas_8_skl.json", 
                     .encoding = "ISO-8859-5"))

#transfer k into dataframe using tidyr::unnest
library(dplyr)
library(tidyr)
df <- tibble(date_agenda=k[[1]]$date_agenda, question=k[[1]]$question) %>% 
        unnest(question) %>% 
        unnest(reporter_question, keep_empty=TRUE) 
1 голос
/ 21 февраля 2020

Вот решение, работающее с данными xml.

Подробнее см. В комментариях к коду:

library(xml2)
library(dplyr)

#read page
page<-read_xml("https://data.rada.gov.ua/ogd/zal/ppz/skl8/dict/agendas_8_skl.xml")

#obtain a list of parent nodes
agendas<-xml_find_all(page, "agenda") 

output<-lapply(agendas, function(agenda) {
  #get date
  date<- agenda %>% xml_find_first(".//date_agenda") %>% xml_text() %>% as.Date(format="%d%m%Y")
  #pull question id from attribute
  question_id <-agenda %>% xml_find_all(".//question") %>% xml_attr("id_question")
  #obtain the information from all of the nodes (assumes equal number of each)
  number_questions <-agenda %>%xml_find_all(".//number_question") %>%  xml_text()
  init_questions <-agenda %>%xml_find_all(".//init_question") %>% xml_text()
  name_questions <-agenda %>%xml_find_all(".//name_question") %>% xml_text()

  #create a data frame of answer (long format)
  data.frame(date, question_id, number_questions, init_questions, name_questions, stringsAsFactors = FALSE)
})

#bind into 1 large long formatted data frame
finalanswer<-bind_rows(output)
head(finalanswer)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...