Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用apply函数从其他矩阵的列中创建新矩阵_R - Fatal编程技术网

R 使用apply函数从其他矩阵的列中创建新矩阵

R 使用apply函数从其他矩阵的列中创建新矩阵,r,R,我有如下的数据矩阵,我想从中生成另一个矩阵,这样新矩阵的列就是原始矩阵中某些列的平均值 我的矩阵: > A A1 A2 B1 B2 E3 E5 E6 E7 E8 E9 [1,] 1 11 21 31 41 51 61 71 81 91 [2,] 2 12 22 32 42 52 62 72 82 92 [3,] 3 13 23 33 43 53 63 73 83 93 [4,] 4 14 24 34 44 54 64 74 84 94 [5,] 5

我有如下的数据矩阵,我想从中生成另一个矩阵,这样新矩阵的列就是原始矩阵中某些列的平均值

我的矩阵:

> A
      A1 A2 B1 B2 E3 E5 E6 E7 E8  E9
 [1,]  1 11 21 31 41 51 61 71 81  91
 [2,]  2 12 22 32 42 52 62 72 82  92
 [3,]  3 13 23 33 43 53 63 73 83  93
 [4,]  4 14 24 34 44 54 64 74 84  94
 [5,]  5 15 25 35 45 55 65 75 85  95
 [6,]  6 16 26 36 46 56 66 76 86  96
 [7,]  7 17 27 37 47 57 67 77 87  97
 [8,]  8 18 28 38 48 58 68 78 88  98
 [9,]  9 19 29 39 49 59 69 79 89  99
[10,] 10 20 30 40 50 60 70 80 90 100
我的新矩阵B,应该包含3列,第一列是A1、A2的平均值,2列是B1、B2的平均值,第3列是E3、E5、

如何使用apply功能实现此功能

B<-apply(A,2, mean)
B这就是你的意思吗

sapply(unique(substr(colnames(A),1,1)), function(x) apply(A[,grepl(x,colnames(A))],1,mean))
       A  B  E
 [1,]  6 26 66
 [2,]  7 27 67
 [3,]  8 28 68
 [4,]  9 29 69
 [5,] 10 30 70
 [6,] 11 31 71
 [7,] 12 32 72
 [8,] 13 33 73
 [9,] 14 34 74
[10,] 15 35 75

使用apply你可以做什么

a <- apply(d, 1, function(x) {
  by(as.vector(x), substr(names(x) , 1, 1), mean)
})
t(a)
       A  B  E
 [1,]  6 26 66
 [2,]  7 27 67
 [3,]  8 28 68
 [4,]  9 29 69
 [5,] 10 30 70
 [6,] 11 31 71
 [7,] 12 32 72
 [8,] 13 33 73
 [9,] 14 34 74
[10,] 15 35 75