Эффективное усреднение второго столбца по интервалам, определенным первым столбцом.

В файле данных есть два числовых столбца. Мне нужно вычислить среднее значение второго столбца по интервалам (например, 100) первого столбца.

Я могу запрограммировать эту задачу на R, но мой код R очень медленный для относительно большого файла данных (миллионы строк, при этом значение первого столбца изменяется от 1 до 33132539).

Здесь я показываю свой R-код. Как мне настроить его быстрее? Приветствуются другие решения, основанные на perl, python, awk или оболочке.

Заранее спасибо.

(1) мой файл данных (разделенный табуляцией, миллионы строк)

5380    30.07383\n
5390    30.87\n
5393    0.07383\n
5404    6\n
5428    30.07383\n
5437    1\n
5440    9\n
5443    30.07383\n
5459    6\n
5463    30.07383\n
5480    7\n
5521    30.07383\n
5538    0\n
5584    20\n
5673    30.07383\n
5720    30.07383\n
5841    3\n
5880    30.07383\n
5913    4\n
5958    30.07383\n

(2) то, что я хочу получить, здесь interval = 100

intervals_of_first_columns, average_of_2nd column_by_the_interval
100, 0\n
200, 0\n
300, 20.34074\n
400, 14.90325\n
.....

(3) R-код

chr1 <- 33132539 # set the limit for the interval
window <- 100 # set the size of interval

spe <- read.table("my_data_file", header=F) # read my data in
names(spe) <- c("pos", "rho") # name my data 

interval.chr1 <- data.frame(pos=seq(0, chr1, window)) # setup intervals
meanrho.chr1 <- NULL # object for the mean I want to get

# real calculation, really slow on my own data.
for(i in 1:nrow(interval.chr1)){
  count.sub<-subset(spe, chrom==1 & pos>=interval.chr1$pos[i] & pos<=interval.chr1$pos[i+1])
  meanrho.chr1[i]<-mean(count.sub$rho)
}
7
задан Matt Dowle 5 September 2012 в 15:48
поделиться