2016-11-01 7 views
-3

У меня есть матрица, которая содержит 100 строк и 120 столбцов. Интересно, как я могу найти среднее значение для каждых 12 столбцов для каждой строки. поэтому я могу иметь среднее значение. Благодарю.Как оценивать каждые 12 столбцов для каждой строки в r

set.seed(1234) 
data=rnorm(100*120) 
data=matrix(data,nrow = 100,ncol = 120) 
+3

Возможно 'sapply (split.default (as.data.frame (данные), ((1: 120) -1)% /% 12 + 1), rowMeans) ' – akrun

+0

@akrun Ты потрясающий. Не могли бы вы немного объяснить свой код? Благодарю. –

+0

Сгруппированные операции в R имеют больший смысл по строкам, а не по столбцам. В первом случае есть специальная функция 'rowsum'. Здесь это 't (rowsum (t (data), gl (10,12)))/12' (заимствование из ответа Габора). – Frank

ответ

2

Для каждой строки r, применяются tapply(r, gl(10, 12), mean) к нему:

t(apply(data, 1, tapply, gl(10, 12), mean)) 

Обратите внимание, что выше, не использует какие-либо свойства mean так обобщается на другие агрегатные функции путем замены mean с некоторыми прочее функция.

Другая возможность, которая также является обобщением перекроить матрицы в 3d массив и применять среднее по указанным размерам:

apply(array(data, c(100, 12, 10)), c(1, 3), mean) 
+0

Благодарим за помощь. @akrun также предлагает решение, и он использует% /%, интересно, знаете ли вы об этом операторе. Благодарю. –

+0

@YangYang: "_% /% указывает целое деление_". См. 'Help ("% /% ")'. – Uwe

+1

'((1: 120) -1)% /% 12 + 1' и' gl (10, 12) 'дают аналогичные результаты. Первый дает числовой вектор, а последний дает коэффициент и избегает сложной формулы. –