如何用R语言将Excel中4244种细菌物种名转换为门分类?
用R语言将细菌物种名映射到门分类的解决方案
以下是针对需求的具体实现步骤,基于taxize包调用NCBI分类数据库完成物种到门的映射:
1. 安装并加载必备工具包
需要用到读取Excel的readxl、调用分类数据库的taxize,以及数据处理的dplyr:
# 首次运行请安装包 install.packages(c("readxl", "taxize", "dplyr")) # 加载包 library(readxl) library(taxize) library(dplyr)
2. 读取Excel中的细菌数据
假设你的Excel文件中,细菌物种名列的表头为species,替换文件路径后执行:
# 读取Excel文件,替换为你的实际文件路径 bacteria_df <- read_excel("你的细菌数据文件.xlsx") # 提取物种名并转为字符型,避免因子类型干扰 species_vec <- as.character(bacteria_df$species)
3. 从NCBI获取分类信息并提取门级别数据
通过taxize的classification函数批量请求NCBI数据库,设置延迟避免触发请求限制:
# 批量获取分类信息,delay=1秒控制请求频率 taxonomy_results <- classification(species_vec, db = "ncbi", delay = 1) # 遍历结果列表,提取门(Phylum)信息,匹配失败则返回NA phylum_list <- lapply(taxonomy_results, function(tax) { if (!is.null(tax)) { # 筛选rank为phylum的分类名称 phylum <- tax$name[tax$rank == "phylum"] # 如果没有找到门级别数据,返回NA ifelse(length(phylum) > 0, phylum, NA) } else { NA } }) # 将列表转为向量,方便合并到原数据 phylum_vec <- unlist(phylum_list)
4. 合并门分类信息到原数据集
# 添加门分类列到原数据框 bacteria_df$phylum <- phylum_vec # 查看处理后的结果 head(bacteria_df)
处理物种名匹配失败的情况
如果部分物种名无法匹配,可先通过gnr_resolve函数校正学名:
# 调用全球名称解析服务匹配正确学名,data_source_ids=4指定NCBI数据源 resolved_names <- gnr_resolve(species_vec, data_source_ids = 4) # 提取匹配后的正确名称,替换原物种名重新请求分类信息 corrected_species <- resolved_names$matched_name taxonomy_corrected <- classification(corrected_species, db = "ncbi", delay = 1)
内容的提问来源于stack exchange,提问作者NLG
相关产品推荐
相关产品推荐

