Проблема состоит в том, что xml находится в глубоко вложенной структуре списка с элементами переменной длины, поэтому невозможно автоматически привести его в прямоугольную структуру данных angular (т. Е. Фрейм данных).
Можно извлечь данные, которые вы хотите, различными способами, но вам нужно будет решить, какие поля вы хотите получить из каждой записи и что делать, если в одном поле несколько записей, например, c .
Я бы посоветовал вам начать с преобразования xml в список с использованием xml2::as_list
и изучения его содержимого с помощью str
, чтобы увидеть, какие поля вам нужны. Затем вы можете создать фрейм данных с полями, которые вы хотите для каждой записи.
Например:
library(bold)
library(XML)
library(dplyr)
xml <- bold_seqspec(taxon=c("carnivora"), format = "xml", marker="COI-5P")
df <- xml2::as_list(xml)
df <- df$bold_records
result <- do.call(rbind, lapply(df, function(x)
{
data.frame(specimen = x$specimen_identifiers$sampleid[[1]],
order = x$taxonomy$order$taxon$name[[1]],
nucleotides = x$sequences$sequence$nucleotides[[1]],
stringsAsFactors = FALSE)
}))
Теперь result
выглядит так:
tibble::as_tibble(result)
#> # A tibble: 4,577 x 3
#> specimen order nucleotides
#> <chr> <chr> <chr>
#> 1 T-2294 Carnivo~ ---CCTGTACCTCTTATTCGGTGCGTGAGCCGGAATGGCGGGAACCGCCCTTAGCCTACTGAT~
#> 2 HBL008245 Carnivo~ NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN~
#> 3 HBL008385 Carnivo~ ACTCTTTACCTTTTATTTGGCGCATGAGCCGGAATAGTAGGCACTGCATTAAGCCTATTGATT~
#> 4 HBL008419 Carnivo~ NNTTTATATTTGCTATTCGGGGCATGAGCCGGTATAGTAGGCACTGCCCTAAGCCTCCTAATT~
#> 5 HLC-10619 Carnivo~ ACCCTTTACCTCTTATTCGGTGCATGAGCCGGAATAGTAGGAACTGCCCTCAGTCTTCTAATC~
#> 6 ROM 101864 Carnivo~ ACTCTCTACCTTCTATTCGGGGCTTGGGCTGGAATAGTGGGCACCGCTCTCAGCCTACTAATT~
#> 7 ROM 93093 Carnivo~ ACTTTGTATTTATTATTTGGAGCATGAGCCGGCATAGTAGGTACCGCCCTGAGCCTTCTTATC~
#> 8 bLpa138 Carnivo~ CCCTGCTATATCTCAATACCAAACACCCCTATTCGTCTGATCTGTTTTAATCACTGCTGTTCT~
#> 9 Fge20 Carnivo~ CCCTGCCATATCTCAATATCAAACACCTCTCTTCGTCTGATCTGTCTTAATTACTGCTGTTTT~
#> 10 bCth05 Carnivo~ TTCGCTGCCCCCTCAATAATAGGCCTTCCTATTGTAATCCTAATCATTATATTCCCATCCATT~
#> # ... with 4,567 more rows