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