2013-02-20 38 views
17

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

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个值的平均值。除了循环遍历行之外,还有更好的方法吗?

+2

我觉得你得到你的矩阵索引南辕北辙'X [I,J]'指行'i'和列'j'。另外,'generateMatrix'从哪里来? – mnel 2013-02-20 05:37:20

+0

解决了部分问题。但有没有办法给'randomMatrix'添加一个额外的列。 如果不是,我必须'随机矩阵51'到'randomMatrix'。 generateMatrix功能与参数(下限,上限,没有行,colmn)。它在R标准库中的一个内置函数' – user2085566 2013-02-20 05:50:38

+0

'transform(randomMatrix,new.col = new.data)'如果你给出了一个更小的例子,它可以被完全剪切并粘贴到R中,更好地描述你想要的结果。 – N8TRO 2013-02-20 05:53:37

回答

4

你想过了吗。

a <- matrix(1:5000, nrow=100) 
a <- transform(a, first10ave = colMeans(a[1:10,])) 
+2

这给新列的每一行赋予相同的值,因为不计算每行的均值(a [1:10,])。 – thelatemail 2013-02-20 06:14:14

31

Bam!

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

在大数据集它却是更快(而且可能更简单)使用方法:

cbind(a, rowMeans(a[,1:10]))