使用应用函数从其他矩阵的列的方式创建新矩阵

时间:2014-01-12 14:14:29

标签: 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 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的意思 第2列 B1,B2 的意思,第3列是 E3,E5,

如何使用应用功能

实现此功能
B<-apply(A,2, mean)

2 个答案:

答案 0 :(得分:1)

使用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

答案 1 :(得分:0)

这是你的意思吗?

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