列对的矩阵平均值

3

我有一个100 X 10的矩阵,其中行代表股票,列代表每个月的价格。我需要计算每只股票每两个月的平均价格(根据下面给出的矩阵,每只股票需要计算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
1个回答

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

第一种解决方案看起来很酷,那么让我问你这个问题。实际上,这只是我要做的事情的概览。我有一个10000(股票)乘以1000(月份)的表格,所以它是每个10000支股票在1000个月内的价格。我需要找到每50个月的每支股票的平均价格,就像我们在示例中为每两个月做的那样。对于TRUE、FALSE来说,它会很快失控,或者至少对我来说是这样。 - greenH0rn
完美,看看我在编辑中如何泛化,只需将 n.by.n 设置为 50 - flodel
太棒了,让我试试看。 - greenH0rn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接