В файле данных есть два числовых столбца. Мне нужно вычислить среднее значение второго столбца по интервалам (например, 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)
}