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, pos = 3,offset=1,cex=0.6)

现在,我想做的是,连同 P 值频率,在每个条形顶部添加样本数。

例如,如果我在第一个间隔中有 1000 个数据点,并且这些值来自 20 个唯一样本,我希望我的绘图在第一个条形顶部显示“1000,20”。

请让我知道我应该怎么做。希望我已经说清楚了。

谢谢。

4

1 回答 1

1

您可以计算唯一值的数量,并在hist()计算之外生成文本标签。有更有效的方法来执行这种拆分-应用-组合操作(查看dplyrand 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 回答