2013-02-20 12 views
17

Ich bin ein Anfänger für R-Programmierung und versuche, eine zusätzliche Spalte zu einer Matrix mit 50 Spalten hinzuzufügen. Diese neue Spalte wäre der Mittelwert der ersten 10 Werte in dieser Zeile.R-Programmierung - Zusätzliche Spalte zur vorhandenen Matrix hinzufügen

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 
} 

Dies gibt die folgenden Fehler

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

ich diesen

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

Aber es funktioniert nur für eine Zeile, wenn ich diese cbind in der Schleife verwenden alle alten Werte sind über geschrieben.

Wie füge ich den Durchschnitt der ersten 10 Werte in der neuen Spalte hinzu. Gibt es einen besseren Weg, dies zu tun, als über Zeilen zu laufen?

+2

Ich denke, Sie bekommen Ihre Matrix in die falsche Richtung Indizierung Runde 'x [i, j]' bezieht sich auf Zeilen 'i' und Spalten' j'. Woher kommt 'generateMatrix'? – mnel

+0

Das löst einen Teil des Problems. Aber gibt es eine Möglichkeit, eine zusätzliche Spalte zu "randomMatrix" hinzuzufügen. Wenn nicht, muss ich randomMatrix51 zu 'randomMatrix' cbind. generateMatrix ist eine Funktion mit Parametern (Untergrenze, Obergrenze, Zeilenanzahl, Spaltenlänge). Es ist eine eingebaute Funktion in der Standardbibliothek von R. – user2085566

+0

'transform (randomMatrix, new.col = new.data)' Es würde eine Tonne helfen, wenn Sie ein viel kleineres Beispiel gaben, das vollständig mit R ausgeschnitten und eingefügt werden kann eine bessere Beschreibung Ihrer gewünschten Ergebnisse. – N8TRO

Antwort

4

Ich denke, Sie sind vorbei denken dies.

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

Dies gibt den gleichen Wert für jede Zeile der neuen Spalte, weil Mittelwert (a [1:10,]) nicht für jede Zeile berechnet wird. – thelatemail

31

Bam!

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

auf große Datensätze ist es jedoch schneller (und wohl auch einfacher) zu verwenden:

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