2011-09-06 18 views
35

Come posso concatenare matrici delle stesse colonne ma un numero diverso di righe? Ad esempio, I desidera concatenare un (dim(a) = 15 7000) e b (dim(b) = 16 7000) e voglio che il risultato sia una matrice di 31 righe per 7000 colonne. Posso farlo per matrici di diverse righe e colonne? Dire che voglio combinare una matrice di 15 righe e 7000 colonne con un'altra di 16 righe e 7500 colonne. Posso creare un set di dati con quello?Matrici concatenanti in R

risposta

44

Suona come siete alla ricerca di rbind:

> a<-matrix(nrow=10,ncol=5) 
> b<-matrix(nrow=20,ncol=5) 
> dim(rbind(a,b)) 
[1] 30 5 

Allo stesso modo, cbind pile le matrici in senso orizzontale.

Non sono del tutto sicuro di cosa si intende per l'ultima domanda ("Posso fare questo per le matrici di diverse righe e colonne.?")

+0

Dire che voglio combinare una matrice di 15 righe e 7000 colonne e un'altra di 16 rwos e 7500 colonne. L'obiettivo è quello di scorrere ogni riga e trovare il valore massimo. – Dombey

+3

@GTyler La domanda per combinare 15x7000 e 16x7500 non è ben definita. Dovrai modificare la tua domanda (non lasciare un commento) per specificare cose come: quale dimensione è il risultato? cosa succede a tutte le righe/colonne in eccesso? in che modo ciascun elemento della matrice risultante viene determinato in modo univoco? – joran

+0

@joran Non sono d'accordo e penso anche che rbind o cbind siano le funzioni sbagliate per questo problema! Essere in grado di combinare frame di dati o matrici di numeri di riga e/o colonna diversi è più adatto a cbindX, come menzionato di seguito! – gawbul

6

cbindX dal pacchetto GData combina più colonne di diverse lunghezze di colonne e file. Controlla la pagina qui:

http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/gdata/html/cbindX.html

Ci vuole più le matrici e le data.frames separati da virgola come input :) Hai solo bisogno di

install.packages("gdata", dependencies=TRUE)

e poi

library(gdata) 
concat_data <- cbindX(df1, df2, df3) # or cbindX(matrix1, matrix2, matrix3, matrix4) 
+2

Questa è di gran lunga la soluzione più veloce che ho provato. – Datageek

+0

'cbindX' è una grande funzione, ma l'OP si limita a chiedere informazioni sulle matrici di unione per riga (si noti le dimensioni del risultato che specificano), non per colonna, e ** gdata ** non contiene una funzione rbind analoga. Esiste tuttavia una funzione 'rbind.fill' in ** plyr **. – joran

+0

Inoltre, il mio commento che la loro domanda non era ben definita era corretta. Sembra che tu stia ignorando questa parte: "L'obiettivo è di scorrere ogni riga e trovare il valore massimo." Non è del tutto chiaro che cosa intendesse l'OP. Se solo riempissero le celle mancanti con NA, avrei semplicemente consigliato rbind.fill. – joran