Сначала можно создать матрицу y.order
с ранжированием строк y
.
y.order <- t(apply(y, 1, order, decreasing=TRUE))
Затем, следуя ранжированию с шагом в десять (достигается с помощью split
), взять средства в каждомстрока в sapply
вложенности.
res <- t(sapply(1:nrow(x), function(m)
sapply(split(1:100, rep(1:10, each=10)), function(n)
mean(x[m, y.order[m, n]]))))
Результат
head(res[,1:5])
# 1 2 3 4 5
# [1,] -0.1678216 0.102505130 0.5324668 0.344757153 0.7638530
# [2,] 0.0157764 -0.526831195 -0.3383647 -0.169914681 -0.6141832
# [3,] -0.5376350 -0.001527589 -0.2797928 -0.680547573 -0.1882390
# [4,] -0.1616552 -0.229384402 0.4574600 0.315167214 -0.1952255
# [5,] -0.0478654 -0.095276814 0.4097697 -0.003122267 0.4291888
# [6,] 0.2280566 -0.322672289 -0.5022181 -0.493842480 -0.3193979
Данные
set.seed(42)
x <- matrix(rnorm(1e4), nrow=100, ncol=100)
y <- matrix(rnorm(1e4), nrow=100, ncol=100)