XML-файлы в R

XML расшифровывается как eXtensible Markup Language. XML предназначен для передачи и хранения данных.

Если вы не знакомы с XML, сначала можете обратиться к:Учебник по XML

Чтобы читать и записывать XML-файлы в R, необходимо установить пакет расширения. Вы можете ввести следующую команду в консоли R, чтобы установить его:

install.packages("XML", repos = "https://mirrors.ustc.edu.cn/CRAN/")

Проверьте, успешно ли прошла установка:

> any(grepl("XML",installed.packages()))
[1] TRUE

Создайте файл sites.xml. Поместите xml-файл в тот же каталог, что и тестовый скрипт. Код выглядит следующим образом:

Пример

<sites> <site> <id>1</id> <name>Google</name> <url>www.google.com</url> <likes>111</likes> </site> <site> <id>2</id> <name>Example</name> <url>www.example.com</url> <likes>222</likes> </site> <site> <id>3</id> <name>Taobao</name> <url>www.taobao.com</url> <likes>333</likes> </site> </sites>

Далее мы можем использовать пакет XML, чтобы загрузить данные из xml-файла:

Пример

# Загрузить пакет XML
library("XML")


# Задать имя файла
result <- xmlParse(file = "sites.xml")

# Вывести результат
print(result)

Подсчитайте количество XML-данных:

Пример

# Загрузить пакет XML
library("XML")


# Задать имя файла
result <- xmlParse(file = "sites.xml")

# Извлечь корневой узел
rootnode <- xmlRoot(result)

# Подсчитать количество данных
rootsize <- xmlSize(rootnode)

# Вывести результат
print(rootsize)

Выполнение приведённого выше кода даёт следующий результат:

[1] 3

Чтобы просмотреть данные узла, для определённой строки используйте[ ], для указанной строки и столбца используйте[[ ]]:

Пример

# Загрузить пакет XML
library("XML")

# Задать имя файла
result <- xmlParse(file = "sites.xml")

# Извлечь корневой узел
rootnode <- xmlRoot(result)


# Просмотреть данные 2-го узла
print(rootnode[2])

# Просмотреть 1-й элемент данных 2-го узла
print(rootnode[[2]][[1]])

# Просмотреть 3-й элемент данных 2-го узла

print(rootnode[[2]][[3]])

Выполнение приведённого выше кода даёт следующий результат:

$site
<site>
  <id>2</id>
  <name>Example</name>
  <url>www.example.com</url>
  <likes>222</likes>
</site> 

attr(,"class")
[1] "XMLInternalNodeList" "XMLNodeList"        
<id>2</id> 
<url>www.example.com</url> 

Преобразовать XML в список данных

Вывод приведённого выше кода представлен в формате XML. Мы можем использовать функцию xmlToList() для преобразования данных файла в формат списка, что делает чтение более удобным:

Пример

# Загрузить пакет XML
library("XML")


# Задать имя файла
result <- xmlParse(file = "sites.xml")

# Преобразовать в список
xml_data <- xmlToList(result)

print(xml_data)
print("============================")

# Вывести данные первой строки и второго столбца
print(xml_data[[1]][[2]])

Выполнение приведённого выше кода даёт следующий результат:

$site
$site$id
[1] "1"

$site$name
[1] "Google"

$site$url
[1] "www.google.com"

$site$likes
[1] "111"


$site
$site$id
[1] "2"

$site$name
[1] "Example"

$site$url
[1] "www.example.com"

$site$likes
[1] "222"


$site
$site$id
[1] "3"

$site$name
[1] "Taobao"

$site$url
[1] "www.taobao.com"

$site$likes
[1] "333"


[1] "============================"
[1] "Google"

Преобразование XML в датафрейм

Данные XML-файла можно преобразовать в тип датафрейм, что упрощает работу с данными:

Пример

# Загрузить пакет XML
library("XML")

# Преобразовать данные XML-файла в датафрейм
xmldataframe <- xmlToDataFrame("sites.xml")
print(xmldataframe)

Выполнение приведённого выше кода даёт следующий результат:

  id   name            url likes
1  1 Google www.google.com   111
2  2 Example www.example.com   222
3  3 Taobao www.taobao.com   333
Другие расширения