绘制R中表格中的前5个值

时间:2011-09-07 18:36:08

标签: r plot

我对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脚本中,以便为多个数据集创建这些图。

谢谢!

2 个答案:

答案 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)

我们应该养成尽可能使用data.table的习惯:

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"]