2013-10-02 2 views
3

У меня есть матрица 100 X 10, где строка - это запас, а столбец - цена каждого месяца. Мне нужно брать среднюю цену каждого запаса каждые 2 месяца (всего 5 раз для каждого запаса в соответствии с приведенной ниже матрицей). Это должно быть сделано для всех 100 акций. Как мне это сделать?Матрица средних пар столбцов

msft  20 30 40 50 60 70 35 76 46 90 
good  30 45 24 45 56 67 56 65 55 66 
aapl  60 46 56 32 43 54 55 57 67 56 
yhoo  64 54 45 56 67 66 78 65 77 78 
bac  45 43 54 45 62 54 57 67 78 54 
jpm  34 35 36 56 54 43 58 69 54 67 

ответ

6

Вы можете сделать

(mat[, c(TRUE, FALSE)] + mat[, c(FALSE, TRUE)])/2 

Обобщение будет

n.by.n <- 2 
j <- seq_len(ncol(mat)) 
j.list <- split(j, j %% n.by.n) 
m.list <- lapply(j.list, function(j)mat[, j, drop = FALSE]) 
Reduce(`+`, m.list)/n.by.n 

Вы также можете использовать матричное умножение:

n.by.n <- 2 
w <- matrix(0, ncol(mat), ncol(mat)/n.by.n) 
w[(row(w) + 1) %/% n.by.n == col(w)] <- 1/n.by.n 
mat %*% w 
+0

первое решение выглядит круто так, дайте мне спросите об этом. Infact это просто взгляд птиц на то, что я пытаюсь сделать. У меня 10000 (запасы) на 1000 (месяцы). Таким образом, его цены на 10000 акций на 1000 месяцев каждый. Мне нужно найти среднюю цену каждого запаса каждые 50 месяцев, как это было в течение каждых двух месяцев в этом примере. TRUE, FALSE быстро выйдет из-под контроля или по крайней мере для меня. – greenH0rn

+0

отлично, посмотрите, как я обобщил в своем редактировании, просто установите 'n.by.n' в' 50'. – flodel

+0

Удивительно, позвольте мне попробовать, что – greenH0rn

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