使用R语言快速根据不同物种分类对OTU进行合并计算,今天借助R语言中dplyr包及aggregate函数的肩膀,重新编写了一个简易的一键式函数,可以快速帮助大家完成不同分类,单分类,多分类的OTU一键合并,欢迎大家建议和完善~
数据格式:
大家需要准备一份OTU/ASV的数据或者其他表示物种丰度的数据。其中列为样方,行为OTUID。
函数主体:
merge_otu <- function(data, formula, e_species=NULL, FUN){
require(dplyr)
df <- as.data.frame(data)
if(!is.null(e_species)){
if(is.character( data[,1])){
rownames(df) <- df[, 1]
df <- df[,-1]
df[is.na(df)] <- 0
df <- df %>% select( -e_species )
result <- aggregate(formula , data = df, FUN)
return(result)
}
if(! is.character(data[,-1])){
df[is.na(df)] <- 0
df <- df %>% select( -e_species )
result <- aggregate(formula , data = df, FUN)
return(result)
}
}
if(is.null(e_species)){
if(is.character( data[,1])){
rownames(df) <- df[, 1]
df <- df[,-1]
df[is.na(df)] <- 0
result <- aggregate(formula , data = df, FUN)
return(result)
}
if(! is.character(data[,-1])){
df[is.na(df)] <- 0
result <- aggregate(formula , data = df, FUN)
return(result)
}
}
}
函数用法:
merge_otu( data = otu , formula = . ~ phylum, e_species = c(“class”, “order”, “family”, ‘genus’, “species”), sum)
参数介绍:
data :请使用模板数据格式;
formula :对应的计算公式,如果想对所有物种分类都保留的话可以在phylum基础上 + class + order + family + genus + species,即 . ~ phylum + class + order + family + genus + specie,结果如下
e_species :对应公式中出现的分类,即要在该参数中设定表示剔除。
需要注意的是,如果所有分类都考虑,请在e_species这个参数中选择默认情况,该参数表示要剔除的分类,也就是意味着,公式中未保留的分类,需要在参数中对应设置。
好比merge_otu( data = otu , formula = . ~ phylum, e_species = c(“class”, “order”, “family”, ‘genus’, “species”), sum),或者上述结果图中的考虑所有分类情况,则e_species 参数默认即可。
FUN :计算汇总统计信息的函数,可应用于所有数据子集。
以上就是该函数所有的介绍信息,本人仅对上述所使用的函数进行简单包装。谨慎使用,不喜勿喷,感谢各位。