【问题标题】:double for-loop to calculate the mean in a range of rows in a matrix双 for 循环计算矩阵中一系列行的平均值
【发布时间】:2018-04-16 19:47:57
【问题描述】:
dataset <- matrix(rnorm(100), 20, 5)

我的数据集是一个包含 100 个回报的矩阵,包含 20 天的 5 个资产。 我想计算每项资产的平均回报,介于 1:10 行和 11:20 行之间。 然后,我想将这样计算的返回值包含在两个向量中,然后又包含在一个列表中。

以下列表应包括在行 1:10 和 11:20 之间计算的两个返回向量。

returns <- vector(mode="list", 2) 

我已经实现了一个 for 循环,如下所述,仅计算 1:10 之间的回报平均值。

assets <- 5
r <- rep(0, assets) # this vector should include the returns over 1:10
for(i in 1:assets){
  r[i] <- mean(data[1:10,i])
}
returns[[1]] <- r

我如何管理这个 for 循环以计算 11:20 行之间的平均回报?

我尝试通过以下方式“索引”数据集的行。

time <- c(1, 10, 11, 20)

然后实现一个双for循环,但是长度不同。此外,在这种情况下,我在管理向量“r”时遇到了困难。因为,在这种情况下,我应该有两个向量,而不再像以前那样只有一个。

for(j 1:length(time){
    for(i in 1:assets){
      r[i] <- mean(data[1:10,i])
    }}
    returns[[1]] <- r

【问题讨论】:

  • 成功了吗?您需要带循环的解决方案吗?
  • 是的,它有效!谢谢您的回答。如果没有问题,我还想看看带有 for 循环的代码。
  • 因为这里有一个更简单的例子,但在我的数据集中我有更多的行。所以,我也对 for 循环感兴趣。 @RafaelC
  • 刚刚编辑了我的答案!看看:)

标签: r for-loop matrix vector


【解决方案1】:

您甚至不需要for 循环。你可以使用colMeans

returns <- vector(mode="list", 2) 
returns[[1]] <- colMeans(dataset[1:10,])
returns[[2]] <- colMeans(dataset[11:20,])

使用for 循环,您的解决方案可能类似于以下内容

for(i in 1:assets){
  returns[[1]] <- c(returns[[1]], mean(dataset[1:10,i]))
  returns[[2]] <- c(returns[[2]], mean(dataset[11:20,i]))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2014-03-15
    • 2021-07-24
    • 1970-01-01
    • 2023-03-27
    • 2021-02-02
    • 1970-01-01
    相关资源
    最近更新 更多