2011-09-06 15 views
35

¿Cómo puedo concatenar matrices de las mismas columnas pero con diferente número de filas? Por ejemplo, I desea concatenar un (dim(a) = 15 7000) yb (dim(b) = 16 7000) y quiero que el resultado sea una matriz de 31 filas por 7000 columnas. ¿Puedo hacer esto para matrices de diferentes filas y columnas? Supongamos que quiero combinar una matriz de 15 filas y 7000 columnas con otra de 16 filas y 7500 columnas. ¿Puedo crear un conjunto de datos con eso?Matrices de concatenación en R

Respuesta

44

Parece que estás buscando rbind:

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

Del mismo modo, cbind apila las matrices horizontalmente.

no estoy del todo seguro de lo que quiere decir con la última pregunta ("¿Puedo hacer esto para las matrices de diferentes filas y columnas.?")

+0

Digamos que quiero combinar una matriz de 15 filas y 7000 columnas y otra de 16 rwos y 7500 columnas. El objetivo es recorrer cada fila y encontrar el valor máximo. – Dombey

+3

@GTyler Su pregunta para combinar 15x7000 y 16x7500 no está bien definida. Deberá editar su pregunta (no dejar un comentario) para especificar cosas como: ¿qué dimensión es el resultado? ¿Qué pasa con todas las filas/columnas sobrantes? ¿Cómo se determina de manera única cada elemento de la matriz resultante? – joran

+0

@joran No estoy de acuerdo y también creo que rbind o cbind son las funciones incorrectas para este problema. ¡Poder combinar marcos de datos o matrices de diferentes números de fila y/o columna es más adecuado para cbindX, como menciono a continuación! – gawbul

6

cbindX del paquete gdata combina múltiples columnas de diferentes columnas y longitudes de fila. Echa un vistazo a la página aquí:

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

Toma múltiples matrices y moldes data.frames separados por comas como entrada :) Sólo tiene que

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

y luego

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

Esta es la solución más rápida que he probado. – Datageek

+0

'cbindX' es una gran función, pero el OP claramente solo pregunta por matrices vinculantes por fila (tenga en cuenta las dimensiones del resultado que especifican), no por columna, y ** gdata ** no contiene una función análoga rbind. Sin embargo, hay una función 'rbind.fill' en ** plyr **. – joran

+0

Además, mi comentario de que su pregunta no estaba bien definida era correcta. Parece que está ignorando esta parte: "El objetivo es recorrer cada fila y encontrar el valor máximo". No está del todo claro qué quiso decir el OP con eso. Si solo llenaron las celdas que faltan con NA, entonces simplemente habría recomendado rbind.fill. – joran