簡體   English   中英

繪制R中表格中的前5個值

[英]plotting the top 5 values from a table in R

我對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腳本中,以便為多個數據集創建這些圖。

謝謝!

假設您的數據位於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保持相同的順序(每個第一個數據集的最大到最小)。

然后你就把它們放在一起並像你在你的例子中那樣繪制它們。

我們應該養成盡可能使用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"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM