R 选定索引上每行的平均值

R 选定索引上每行的平均值,r,matrix,R,Matrix,我有一个包含7列数字数据的矩阵,我想计算每行所选条目的平均值,即每行只有2个数字。另一个矩阵包含为每行选择哪些条目的信息。在R中,最好的方法是什么 a b c d e f g [1,] 0.0068 0.0240 0.0014 0.0035 0.0029 0.0293 0.0384 [2,] 0.0197 0.0325 0.0016 0.0163 0.0030 0.0234 -0.0937 [3,]

我有一个包含7列数字数据的矩阵,我想计算每行所选条目的平均值,即每行只有2个数字。另一个矩阵包含为每行选择哪些条目的信息。在R中,最好的方法是什么

       a      b      c       d      e       f       g
[1,]  0.0068  0.0240 0.0014  0.0035 0.0029  0.0293  0.0384
[2,]  0.0197  0.0325 0.0016  0.0163 0.0030  0.0234 -0.0937
[3,] -0.0194 -0.0265 0.0045 -0.0068 0.0029  0.0265  0.0997
[4,]  0.0048  0.0540 0.0015  0.0030 0.0031 -0.0090  0.0580
[5,]  0.0369  0.0112 0.0015  0.0072 0.0029  0.0597 -0.0134
[6,] -0.0025 -0.0325 0.0014  0.0031 0.0034  0.0757  0.0385


     [,1] [,2]
[1,]    2    1
[2,]    2    7
[3,]    2    6
[4,]    6    7
[5,]    7    2
[6,]    7    6

您可以使用另一个矩阵为矩阵编制索引。在这种情况下,索引矩阵将给出2个索引矩阵,如下函数所示

首先是一些数据,因为您没有以方便的、可复制粘贴的方式发布

set.seed(1234)
mat <- matrix(rnorm(6*7), ncol = 7)
inx <- matrix(sample(7, 2*6, TRUE), ncol = 2)

这里有一个通用的方法,使用sapply from base R,它可以用于索引矩阵中任意数量的行和列-

sapply(1:nrow(inx), function(x) {
  mean(mat[x, inx[x, ]])
})

[1] 22 20 27 22 11 27
资料-

set.seed(1)
mat <- matrix(1:42, ncol = 7)
inx <- matrix(sample(7, 2*6, TRUE), ncol = 2)

mat
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    1    7   13   19   25   31   37
[2,]    2    8   14   20   26   32   38
[3,]    3    9   15   21   27   33   39
[4,]    4   10   16   22   28   34   40
[5,]    5   11   17   23   29   35   41
[6,]    6   12   18   24   30   36   42

inx
     [,1] [,2]
[1,]    2    7
[2,]    3    5
[3,]    5    5
[4,]    7    1
[5,]    2    2
[6,]    7    2

是否可以将其推广到不使用循环就从每行中选择k个数字?@NoobsRunWild Done,请参阅末尾。
sapply(1:nrow(inx), function(x) {
  mean(mat[x, inx[x, ]])
})

[1] 22 20 27 22 11 27
set.seed(1)
mat <- matrix(1:42, ncol = 7)
inx <- matrix(sample(7, 2*6, TRUE), ncol = 2)

mat
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    1    7   13   19   25   31   37
[2,]    2    8   14   20   26   32   38
[3,]    3    9   15   21   27   33   39
[4,]    4   10   16   22   28   34   40
[5,]    5   11   17   23   29   35   41
[6,]    6   12   18   24   30   36   42

inx
     [,1] [,2]
[1,]    2    7
[2,]    3    5
[3,]    5    5
[4,]    7    1
[5,]    2    2
[6,]    7    2