Я пытаюсь преобразовать xml-файл из архива Федерального регистра США в кадр данных, где каждая строка соответствует определенному действию (например, Уведомление, Правило, Предлагаемое правило) и каждый столбец содержит атрибут, связанный с этим действием (например, тип агентства, субъект и т. д.). Я попробовал следующее:Преобразование (возможно, искаженное) xml в Data Frame в R
> setwd("C:/Users/mwilliamson/Desktop/FedReg/2000/01/")
> url = "FR-2000-01-18.xml"
> doc <- xmlInternalTreeParse("FR-2000-01-18.xml")
> doc_list <- xmlToList(doc)
> library(plyr)
> j <- ldply(doc_list, data.frame)
Однако, он возвращает ошибку:
Error in data.frame(SECTNO = "§ 831.502", SUBJECT = "Automatic separation;
exemption.", :
arguments imply differing number of rows: 1, 0
Оказывается, что количество пустых значений и различие в длине переменных создают проблему, как R обрабатывает XML (возможно, я ошибаюсь здесь, не так много опыта с пакетом xml). Я думал, что возможно использовать файл схемы (.xsd), чтобы избежать этого, но неясно, как я использую схему с xmlToList. По сути, я ищу «лучший» способ обработать xml в описываемый мной фрейм данных и заполнить любые пустые ячейки NA. Я загрузил схемы и пример файла для:
https://www.dropbox.com/sh/pluje12t185w1v2/ys1xHzilQO
Любая помощь вы можете предоставить было бы здорово !!
UPDATE: Я также попытался:
xmlToDataFrame(doc, colClasses = character, homogeneous = NA)
но получают следующее:
Error: duplicate subscripts for columns
Опять же, большое спасибо за любую помощь вы могли бы предложить.
UPDATE: Кажется, что узел/AGENCY - это то, где данные начинают фактически соответствовать формату, который я пытаюсь создать; однако я не могу извлечь всю оставшуюся часть данных (т. е. я могу получить один столбец с 115 документами, идентифицирующими агентство, но не могу получить остальную информацию, связанную с этими 115 записями). Я пробовал следующее:
out <- getNodeSet(doc, "//*", fun=xmlToList)
df <- data.frame(do.call(rbind, out))
head(df)
, но он, похоже, вызывает R для краха. Я надеюсь, что мои дальнейшие обновления будут вдохновлять кого-то на руку. Еще раз спасибо за любую помощь, которую вы можете дать.
Это очень полезно. Спасибо. Я не понимаю, как использовать последний бит кода для разрыва SUPLINFO. Я получаю подсчет количества «NA» в таблице, но я не знаю, какие следующие шаги программирования. Спасибо за любую дополнительную информацию, которую вы можете дать. –
Глядя на это более близко, вы, вероятно, согласны с надписью blob. Я добавил дополнительный код в конце моего ответа, чтобы проверить дочерние узлы, чтобы вы могли также захватить один или несколько из них, если это необходимо, вот и все. –
Отлично! Это в сочетании с циклом будет работать для того, что мне нужно. спасибо –