2015-05-12 3 views
-3

У меня есть большая матрица, состоящая из многих столбцов. Я хотел бы получить новую матрицу с таким же количеством строк и половиной числа столбцов, усредняя каждые около 2 столбцов (например, столбец 1 с 2, столбец 3 с 4 и т. Д.). Теперь я использую цикл for, но мне было интересно, был ли более разумный способ достичь этого.R: Средние пары столбцов в матрице

ответ

3

Вот Векторизованное решение:

m <- matrix(1:96,8); 
m; 
##  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] 
## [1,] 1 9 17 25 33 41 49 57 65 73 81 89 
## [2,] 2 10 18 26 34 42 50 58 66 74 82 90 
## [3,] 3 11 19 27 35 43 51 59 67 75 83 91 
## [4,] 4 12 20 28 36 44 52 60 68 76 84 92 
## [5,] 5 13 21 29 37 45 53 61 69 77 85 93 
## [6,] 6 14 22 30 38 46 54 62 70 78 86 94 
## [7,] 7 15 23 31 39 47 55 63 71 79 87 95 
## [8,] 8 16 24 32 40 48 56 64 72 80 88 96 
(m[,seq(1,ncol(m),2)]+m[,seq(2,ncol(m),2)])/2; 
##  [,1] [,2] [,3] [,4] [,5] [,6] 
## [1,] 5 21 37 53 69 85 
## [2,] 6 22 38 54 70 86 
## [3,] 7 23 39 55 71 87 
## [4,] 8 24 40 56 72 88 
## [5,] 9 25 41 57 73 89 
## [6,] 10 26 42 58 74 90 
## [7,] 11 27 43 59 75 91 
## [8,] 12 28 44 60 76 92 
+3

Как только об '(м [C (TRUE, FALSE)] + [т, с (FALSE, TRUE)])/2' –

+1

Очень умный @DavidArenburg ! Делает мои вызовы 'seq()' выглядят уродливыми ... – bgoldst

+0

@David Arenburg спасибо, но я получаю сообщение об ошибке: объект типа «закрытие» не является подмножеством. вы знаете, в чем проблема? Я сделал это как tis (df [c (TRUE, FALSE)] + df [c (FALSE, TRUE)]/2) –

Смежные вопросы