在矩阵中随机采样和平均数据

时间:2014-01-27 21:15:24

标签: r matrix average subset random-sample

我有一个包含计数信息的200x200矩阵。我想在我的矩阵中随机抽取5行x 5列子集,并取这个子集中的平均值。我想在整个矩阵中随机执行8次(所以可能使用for循环?)然后取这些8的平均值。我还需要使用限制,以便随机数生成器不会在最边缘采样我的矩阵

我是R的新手并且编程一般,所以推动正确的方向会非常有帮助。

2 个答案:

答案 0 :(得分:1)

这是一种方法:

# an example 10x10 matrix
mat <- matrix(1:100, 10)
nc <- ncol(mat) # number of columns
nr <- nrow(mat) # number of rows

size <- 5 # size of the subset matrix
nmat <- 8 # number of submatrices

# sample indices of submatrices
set.seed(1)
idxc <- sample(seq(2, nc - size), size = nmat, replace = TRUE)
idxr <- sample(seq(2, nr - size), size = nmat, replace = TRUE)

# create a list of 8 submatrices
res <- mapply(function(x, y) mat[seq(x, x + size - 1), seq(y, y + size - 1)],
              idxr, idxc, SIMPLIFY = FALSE)

# calculate the average of the averages
mean(unlist(res))
# [1] 53.875

答案 1 :(得分:0)

另一种选择,假设你总是拉出一个正方形。 (即,行/列彼此相邻)。

y <- matrix(round(rep(runif(200),200)*100),ncol=200,nrow=200)

sq <- seq(1,196,1) 
blocks <- sample(sq,8) # no replacements of squares

mean(
  sapply(blocks, 
    function(x) mean(y[x:(4+x),x:(4+x)])
  )
)