2013-02-20 35 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]))