使用列对数据框进行分箱并计算中位数

时间:2015-05-03 00:31:50

标签: r

我有一个带有染色体基因的文件及其表达

  Gene_id        rpkm   chr    start     stop
AT1G01010     4.18954  Chr1     3631     5899
AT1G01020    10.22902  Chr1     5928     8737
AT1G01030     1.99064  Chr1    11649    13714
.
.
AT1G80980     5.67423  Chr1 30422058 30424087
AT1G80990     79.5678  Chr1 30424421 30425192

我想使用start列将文件分成20,000个窗口。 因此,首先得到落入窗口的基因中位数从0到20,000,然后从20,000到40,000等等。

我想最终看起来像这样的文件

 chr  start   stop  median   
Chr1      0  20000       x
Chr1  20000  40000       y

我试过写一个函数

exp <- read.table(file='cegs_chr1ath_pos.txt', header=T, stringsAsFactors=F)

slide_function <- function(data, window, step){
  #get how many genes looking at along chromosome
  total <- length(data)
  #use seq() to get a sequence of expression values from 0 to total
  points <- seq(from=0, to=30424421, by = step)
  result <- vector(length = length(points))
  for(i in 1:length(points)){
    result[i] <- median(data[points[i]:(points[i] + window - 1)],)
  }
  return(result)
}

slide_function(exp$start,20000,200)

但是我不知道如何让函数计算该窗口的rpkm值的中位数,或者如何让它生成我希望的结果文件

0 个答案:

没有答案