Я вижу, что веб-сайт, на который вы ссылаетесь, позволяет экспортировать данные в xml. Я настоятельно рекомендую сделать это. R может очень эффективно обрабатывать / анализировать xml-файлы.
Когда я загружаю первые три результата с этого сайта в файл biosample_result.xml
, легко обрабатывать, используя xml2
-package
library( xml2 )
library( magrittr )
doc <- read_xml( "./biosample_result.xml")
#gret all BioSample nodes
BioSample.Nodes <- xml_find_all( doc, "//BioSample")
#build a data.frame
data.frame(
sample_name = xml_find_first( BioSample.Nodes , ".//Id[@db='SRA']") %>% xml_text(),
stringsAsFactors = FALSE )
# sample_name
# 1 ERS2609990
# 2 ERS2609989
# 3 ERS2609988
Так что, если вы можете использовать XML, вам просто нужно будет использовать правильный синтаксис xpath, чтобы получить необходимые данные / узлы в нужные вам столбцы ...
В приведенном выше примере я извлек(из каждого узла BioSample) первый ID-узел с атрибутом db
равен SRA
, и результат сохранен в параллельном столбце sample_name
.
Все еще предполагается, что вы можете использовать xml-данные. Если вы смотрите на все атрибуты в одном df, вам нужны функции из purrr
, поэтому просто загрузите все tidyverse
library( tidyverse )
df <- xml_find_all( doc, "//BioSample") %>%
map_df(~{
set_names(
xml_find_all(.x, ".//Attribute") %>% xml_text(),
xml_find_all(.x, ".//Attribute") %>% xml_attr( "attribute_name" )
) %>%
as.list() %>%
flatten_df()
})
, и вы получите df, подобный этому