Исходя из вашего кода, я бы предположил, что это сработает полный набор данных (в зависимости от памяти вашей системы):
chr1 <- 33132539
window <- 100
pos <- cut(1:chr1, seq(0, chr1, window))
meanrho.chr1 <- tapply(spe$rho, INDEX = pos, FUN = mean)
Я думаю, что вам нужен коэффициент, который определяет группы интервалов для каждых 100в первом столбце (rho
), а затем вы можете использовать стандартное семейство применений для получения средств в группах.
Вот данные, которые вы разместили в воспроизводимой форме.
spe <- structure(list(pos = c(5380L, 5390L, 5393L, 5404L, 5428L, 5437L,
5440L, 5443L, 5459L, 5463L, 5480L, 5521L, 5538L, 5584L, 5673L,
5720L, 5841L, 5880L, 5913L, 5958L), rho = c(30.07383, 30.87, 0.07383,
6, 30.07383, 1, 9, 30.07383, 6, 30.07383, 7, 30.07383, 0, 20,
30.07383, 30.07383, 3, 30.07383, 4, 30.07383)), .Names = c("pos",
"rho"), row.names = c(NA, -20L), class = "data.frame")
Определите интервалы с помощью cut
, мы просто хотим каждое сотое значение (но вы можете захотеть настроить детали в соответствии с вашим кодом для вашего реального набора данных).
pos.index <- cut(spe$pos, seq(0, max(spe$pos), by = 100))
Теперь передайте желаемую функцию (mean
) по каждой группе.
tapply(spe$rho, INDEX = pos.index, FUN = mean)
(много NA, так как мы не начинали с 0, тогда)
(5.2e+03,5.3e+03] (5.3e+03,5.4e+03] (5.4e+03,5.5e+03] (5.5e+03,5.6e+03] (5.6e+03,5.7e+03] (5.7e+03,5.8e+03] (5.8e+03,5.9e+03]
20.33922 14.90269 16.69128 30.07383 30.07383 16.53692
(При необходимости добавьте другие аргументы в FUN, например, na.rm, например:)
## tapply(spe$rho, INDEX = pos.index, FUN = mean, na.rm = TRUE)
См. ?tapply
применение к группам в векторе (рваный массив) и ?cut
для способов генерации факторов группировки.