0

私は次のデータを持っています、

SampleID Pos Dep Pvalues
sample_1 849 62 0.02755358
sample_1 859 63 0.07406833
sample_1 864 63 0.00351564
sample_1 883 60 0.02780868
sample_1 893 58 0.00451450
sample_1 895 58 0.03600795
sample_2 54 66 0.11864407
sample_2 55 67 0.01515152
sample_2 71 91 0.02712367
sample_2 78 97 0.00077325

各バーの上に頻度値を持つ P 値のヒストグラムを生成しました。以下、コードです

pval_at_site <- read.table("samples.pval")
s <- hist(pval_at_site$Pvalues, xlab="Pval",cex=0.8)
text(s$mids,s$counts,s$count,srt=90,位置 = 3、オフセット = 1、cex = 0.6)

ここで、私がやりたいことは、P 値の頻度とともに、各バーの上にサンプル数を追加することです。

たとえば、最初の間隔に 1000 個のデータポイントがあり、これらの値が 20 個の一意のサンプルから取得された場合、プロットの最初のバーの上に「1000,20」と表示する必要があります。

これについてどうすればよいか教えてください。私が自分自身を明確にしたことを願っています。

ありがとう。

4

1 に答える 1

1

一意の値の数を計算し、hist()計算の外でテキスト ラベルを生成できます。この分割 - 適用 - 結合操作を実行するより効率的な方法があります ( と を調べてくださいdplyr)data.tableが、以下のコードは最小限の変更でそれを実装しています。

data= "SampleID Pos Dep Pvalues
sample_1 849 62 0.02755358
sample_1 859 63 0.07406833
sample_1 864 63 0.00351564
sample_1 883 60 0.02780868
sample_1 893 58 0.00451450
sample_1 895 58 0.03600795
sample_2 54 66 0.11864407
sample_2 55 67 0.01515152
sample_2 71 91 0.02712367
sample_2 78 97 0.00077325"

pval_at_site <- read.table(text=data, header=TRUE)
s <- hist(pval_at_site$Pvalues, xlab="Pval",cex=0.8)

# get a vector of each bin
bins <- cut(pval_at_site$Pvalues, breaks=s$breaks)

# get sum of unique values by bin value based on hist() output
count.samples <- tapply(pval_at_site$SampleID, bins, function(x) length(unique(x)))
count.samples[is.na(count.samples)] <- 0  ## remove NAs from empty bins

# generate text labels by combining both values
tags <- paste(s$count, count.samples, sep=" - ")

text(s$mids,s$counts,tags,srt=90,pos = 3,offset=1,cex=0.6)
于 2014-10-13T09:52:57.747 に答える