我对R很新,所以这可能是一个简单的问题.我有一个数据表,其中包含如下物种的频率计数:
Acidobacteria 47
Actinobacteria 497
Apicomplexa 7
Aquificae 16
Arthropoda 26
Ascomycota 101
Bacillariophyta 1
Bacteroidetes 50279
...
Run Code Online (Sandbox Code Playgroud)
表中约有50种.正如您所看到的,某些值比其他值大很多.我希望有一个堆积的条形图,其中前5个物种的百分比和一个"其他"类别具有所有其他百分比的总和.所以我的条形图总共有6个类别(前5名和其他).
我有3个额外的数据集(样本网站),我想做同样的事情,只在每个数据集中突出显示第一个数据集的前5个,并将它们全部放在同一个图表上.最终图表将有4个堆叠条形图,显示第一个数据集中的顶级物种如何在每个附加数据集中发生变化.
我手工制作了一个样本图(将数据列在R之外,并在最终的百分比表中输入),让您了解我正在寻找的内容:http://dl.dropbox.com/u/1938620 /phylumSum2.jpg
我想将这些步骤放入R脚本中,以便为多个数据集创建这些图.
谢谢!
假设您的数据位于data.frame中 DF
DF <- read.table(textConnection(
"Acidobacteria 47
Actinobacteria 497
Apicomplexa 7
Aquificae 16
Arthropoda 26
Ascomycota 101
Bacillariophyta 1
Bacteroidetes 50279"), stringsAsFactors=FALSE)
names(DF) <- c("Species","Count")
Run Code Online (Sandbox Code Playgroud)
然后,您可以确定哪些物种位于前5位
top5Species <- DF[rev(order(DF$Count)),"Species"][1:5]
Run Code Online (Sandbox Code Playgroud)
然后可以将每个数据集转换为这些数据集和"其他"数据集
DF$Group <- ifelse(DF$Species %in% top5Species, DF$Species, "Other")
DF$Group <- factor(DF$Group, levels=c(top5Species, "Other"))
DF.summary <- ddply(DF, .(Group), summarise, total=sum(Count))
DF.summary$prop <- DF.summary$total / sum(DF.summary$total)
Run Code Online (Sandbox Code Playgroud)
制作Group一个因子将它们保持在相同的顺序DF.summary(每个第一个数据集的最大到最小).
然后你就把它们放在一起并像你在你的例子中那样绘制它们.