2011-09-07 14 views
6

これは簡単な質問かもしれないので、Rにはとても新しいです。私はこの種の頻度カウントを含むデータの表を持っています:テーブルの上位5つの値をプロットするR

Acidobacteria    47 
    Actinobacteria   497 
    Apicomplexa     7 
    Aquificae     16 
    Arthropoda     26 
    Ascomycota    101 
    Bacillariophyta    1 
    Bacteroidetes   50279 
    ... 

表には約50種があります。あなたが見ることができるように、いくつかの値は他よりもはるかに大きい値です。私は、上位5種の割合の積み重ねられた棒グラフと、他のすべての百分率の合計を持つ「その他」の1つのカテゴリを持っていたいと思います。だから、私のbarplotは合計6つのカテゴリ(トップ5とその他)を持つでしょう。

私は3つの追加データセット(サンプルサイト)を用意しています。これらのデータセットでは、最初のデータセットの上位5を強調表示して、すべて同じグラフ上に置くだけです。最後のグラフには、各追加データセットで最初のデータセットのトップの種がどのように変化するかを示す4つのスタックバーがあります。

私はあなたに私が探しているかのアイデアを与えるために(Rの外にデータを集計し、ちょうど割合のファイナルテーブルで供給)手でサンプルプロットを作った:http://dl.dropbox.com/u/1938620/phylumSum2.jpg

私はしたいと思いますこれらのステップをRスクリプトに入れて、多くのデータセットに対してこれらのプロットを作成することができます。

ありがとうございます!

答えて

5

は、あなたのデータは、データセットのそれぞれは、その後に変換することができ

top5Species <- DF[rev(order(DF$Count)),"Species"][1:5] 

でトップ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つと「その他」by

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(最初のデータセットごとに最大から最小)までpsします。

次に、例のようにまとめてプロットします。

+0

こんにちは、提案に感謝を。あなたが示唆したように上位5種のリストを作成しようとしましたが、エラーが発生しました: DF $ Countのエラー:$演算子はアトミックベクトルには無効です。私は種が既にテーブル()関数で作成されたテーブルにあることを言及する必要があります。 – helicase

+0

データの形式がわかりません。私はあなたのデータのように見えるデータセットを作り直さなければならなかったが、それは別の構造を持つかもしれない。例が再現可能になるように、あなたが持っているdata.frame(またはそれがどんなフォーマットであっても)を投稿する必要があります。 –

+0

テーブルをファイルに書き出して再読み込みしたようです。 DF.summaryは私に必要なテーブルを与えます、ありがとう!今すぐコマンドを実行して、何をやっているのか把握するだけです:p – helicase

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