进入Taxonomy数据库: https://www.ncbi.nlm.nih.gov/taxonomy
library(tidyverse) # tax_id -- the id of node associated with this name # name_txt -- name itself # unique name -- the unique variant of this name if name not unique # name class -- (synonym, common name, ...) names.0 <- read_delim("names.dmp",delim = "\t|\t",col_names=F) |> mutate(X4=str_replace(X4,"\\t\\|","")) |> select(tax_id=X1, name_txt=X2, unique_name=X3, name_class=X4) head(names.0) # nodes.dmp file consists of taxonomy nodes. The description for each node includes the following # fields: # tax_id -- node id in GenBank taxonomy database # parent tax_id -- parent node id in GenBank taxonomy database # rank -- rank of this node (superkingdom, kingdom, ...) # embl code -- locus-name prefix; not unique # division id -- see division.dmp file # inherited div flag (1 or 0) -- 1 if node inherits division from parent # genetic code id -- see gencode.dmp file # inherited GC flag (1 or 0) -- 1 if node inherits genetic code from parent # mitochondrial genetic code id -- see gencode.dmp file # inherited MGC flag (1 or 0) -- 1 if node inherits mitochondrial gencode from parent # GenBank hidden flag (1 or 0) -- 1 if name is suppressed in GenBank entry lineage # hidden subtree root flag (1 or 0) -- 1 if this subtree has no sequence data yet # comments -- free-text comments and citations nodes.0 <- read_delim("nodes.dmp",delim = "\t|\t",col_names=F) |> mutate(X13=str_replace(X13,"\\t\\|","")) |> select(tax_id=X1, parent_tax_id=X2, rank=X3, embl_code=X4, division_id=X5, inherited_div_flag=X6, genetic_code_id=X7,inherited_GC_flag=X8, mitochondrial_genetic_code_id=X9,inherited_MGC_flag=X10, GenBank_hidden_flag=X11,hidden_subtree_root_flag=X12, comments=X13) head(nodes.0) unique(nodes.0$rank) table(nodes.0$rank) name_node <- nodes.0 |> inner_join(names.0,by = "tax_id") |> filter(name_class=="scientific name") |> select(tax_id,rank_= rank,name=name_txt,name_txt,parent_tax_id) library(RMySQL) con <- dbConnect(RMySQL::MySQL(), dbname = "test", host = "192.168.10.177", user = "root", password = "rootroot",port=23306) # dbListTables(con) # dbListFields(con, "taxonomy") dbWriteTable(con, "taxonomy", name_node, overwrite=TRUE, row.names = FALSE)
superkingdom <- name_node |> filter(rank_=='superkingdom') kingdom <- name_node |> filter(rank_=='kingdom') phylum <- name_node |> filter(parent_tax_id==2 & rank_=='phylum') class <- name_node |> filter(parent_tax_id %in% phylum$tax_id & rank_=='class') order <- name_node |> filter(parent_tax_id %in% class$tax_id & rank_=='order') family <- name_node |> filter(parent_tax_id %in% order$tax_id & rank_=='family') genus <- name_node |> filter(parent_tax_id %in% family$tax_id & rank_=='genus') species <- name_node |> filter(parent_tax_id %in% genus$tax_id & rank_=='species') subspecies <- name_node |> filter(parent_tax_id %in% species$tax_id & rank_=='subspecies') bacteria <- Reduce(function(x,y){rbind(x,y)},list(superkingdom,kingdom,phylum, class,order,family,genus, species,subspecies),accumulate = F)
CREATE INDEX name_txt_index ON taxonomy (name_txt); SHOW INDEX FROM taxonomy; ALTER TABLE taxonomy DROP INDEX name_txt_index; SELECT * FROM taxonomy where name_txt like '%Saccharomyces boulardii%' SELECT * FROM taxonomy where name_txt like '%Weizmannia coagulans%'