R 选定索引上每行的平均值
我有一个包含7列数字数据的矩阵,我想计算每行所选条目的平均值,即每行只有2个数字。另一个矩阵包含为每行选择哪些条目的信息。在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,]
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