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行之间的回报平均值?
我试过&#34;索引&#34;数据集的行,按以下方式。
time <- c(1, 10, 11, 20)
然后实现双重for循环,但长度不同。而且,在这种情况下,我遇到了管理矢量&#34; r&#34;的困难。因为,在这种情况下,我应该有两个向量,而不再像以前那样只有一个向量。
for(j 1:length(time){
for(i in 1:assets){
r[i] <- mean(data[1:10,i])
}}
returns[[1]] <- r
答案 0 :(得分:2)
您甚至不需要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]))
}