26

我是 R 编程的初学者,正在尝试向具有 50 列的矩阵添加一列。这个新列将是该行中前 10 个值的平均值。

randomMatrix <- generateMatrix(1,5000,100,50)
randomMatrix51 <- matrix(nrow=100, ncol=1)

for(ctr in 1:ncol(randomMatrix)){  
randomMatrix51.mat[1,ctr]  <- sum(randomMatrix [ctr, 1:10])/10
}

这给出了以下错误

Error in randomMatrix51.mat[1, ctr] <- sum(randomMatrix[ctr, 1:10])/10 :incorrect
number of subscripts on matrix

我试过这个

cbind(randomMatrix,sum(randomMatrix [ctr, 1:10])/10)

但它只适用于一行,如果我在循环中使用这个 cbind,所有旧值都会被覆盖。

如何在新列中添加前 10 个值的平均值。除了循环遍历行之外,还有更好的方法吗?

4

2 回答 2

40

砰!

a <- matrix(1:5000, nrow=100)
a <- cbind(a,apply(a[,1:10],1,mean))

然而,在大型数据集上,它使用起来更快(并且可以说更简单):

cbind(a, rowMeans(a[,1:10]) )
于 2013-02-20T06:10:00.410 回答
4

我觉得你想多了。

a <- matrix(1:5000, nrow=100)
a <- transform(a,  first10ave = colMeans(a[1:10,]))
于 2013-02-20T06:04:43.753 回答