Las funciones rbind() y cbind() en R

Manipulaci贸n de datos con R Transformaci贸n de datos
Las funciones rbind() y cbind() en R

La funci贸n rbind combina vectores, matrices o data frames por filas, mientras que la funci贸n cbind los combina por columnas. En este tutorial aprender谩s a utilizar estas funciones en varios casos de uso.

Unir por filas con rbind

Si quieres combinar dos o m谩s vectores de la misma longitud uni茅ndolos por filas puedes introducirlos en la funci贸n rbind. La salida ser谩 una matriz con tantas filas como vectores y tantas columnas como elementos.

x <- c(1, 2, 3)
y <- c("G1", "G2", "G3")

# Combinar dos vectores por filas
rbind(x, y)
  [,1] [,2] [,3]
x "1"  "2"  "3" 
y "G1" "G2" "G3"

Si la longitud de los vectores no es igual obtendr谩s un mensaje de advertencia indicando 鈥number of columns of result is not a multiple of vector length (arg 1)鈥. En este caso, se reciclar谩n los elementos de los vectores m谩s peque帽os.

Sin embargo, puedes combinar un 煤nico valor (num茅rico o car谩cter) con un vector y el valor se reciclar谩 a la longitud del vector mayor.

x <- c(1, 2, 3)

# Combinar un entero y un vector
rbind(2, x)
  [,1] [,2] [,3]
     2    2    2
x    1    2    3

Agregar nuevas filas a un data frame o una matriz

Considera el siguiente data frame de ejemplo con tres filas y dos columnas:

df <- data.frame(x = 1:3, y = c("G1", "G2", "G3"))
df
  x  y
1 1 G1
2 2 G2
3 3 G3

Si quieres a帽adir una nueva fila, puedes introducir el data frame y el vector en rbind, como se muestra a continuaci贸n.

df <- data.frame(x = 1:3, y = c("G1", "G2", "G3"))

z <- c(4, "G4") 

# Agregar una nueva fila
df <- rbind(df, z)
df
  x  y
1 1 G1
2 2 G2
3 3 G3
4 4 G4

Ten en cuenta que tambi茅n puedes introducir varios vectores en la funci贸n para a帽adir varias filas al data frame.

df <- data.frame(x = 1:3, y = c("G1", "G2", "G3"))

z <- c(4, "G4")
w <- c(5, "G5")

# A帽adir DOS nuevas filas
df <- rbind(df, z, w)
df
  x  y
1 1 G1
2 2 G2
3 3 G3
4 4 G4
5 5 G5

Combinar data frames por filas

Tambi茅n puedes unir dos o m谩s data frames con la funci贸n rbind siempre que tengan el mismo n煤mero de columnas y nombres de columna.

df1 <- data.frame(x = 1:3, y = c("G1", "G2", "G3"))

df2 <- data.frame(x = 15:19, y = c("G15", "G16", "G17", "G18", "g19"))

# Unir dos data frames por filas
df <- rbind(df1, df2)
df
   x   y
1  1  G1
2  2  G2
3  3  G3
4 15 G15
5 16 G16
6 17 G17
7 18 G18
8 19 g19

Unir data frames con nombres de columna diferentes

Ten en cuenta que si los nombres de las columnas de los data frames no son iguales no podr谩s fusionarlos a pesar de que exista un nombre de columna com煤n. En este caso se producir谩 un error.

df1 <- data.frame(x = 1:3, y = c("G1", "G2", "G3"))

df2 <- data.frame(x = 15:19, z = c("Z1", "Z2", "Z3", "Z4", "Z5"))

# Unir dos data frames
df <- rbind(df1, df2)
df
Error in match.names(clabs, names(xi)) : 
  names do not match previous names

En caso de que necesites unir dos data frames por filas con diferentes nombres de columna o con s贸lo algunos nombres de columna comunes necesitar谩s utilizar la funci贸n bind_rows de dplyr.

df1 <- data.frame(x = 1:3, y = c("G1", "G2", "G3"))

df2 <- data.frame(x = 15:18, z = c("Z1", "Z2", "Z3", "Z4"))

# Unir dos data frames con nombres de columna diferentes
library(dplyr)

df <- dplyr::bind_rows(df1, df2)
df
   x    y    z
1  1   G1 <NA>
2  2   G2 <NA>
3  3   G3 <NA>
4 15 <NA>   Z1
5 16 <NA>   Z2
6 17 <NA>   Z3
7 18 <NA>   Z4

Etiquetas de fila al unir por filas

La funci贸n rbind proporciona un argumento llamado deparse.level que por defecto es 1. Si se establece este argumento a 0 la salida no tendr谩 etiquetas de fila y cuando se establece a 2 las etiquetas se construir谩n a partir de los nombres de los argumentos.

x <- c(1, 2, 3)

# Combinar un entero y un vector
rbind(2, x, deparse.level = 0)
     [,1] [,2] [,3]
[1,]    2    2    2
[2,]    1    2    3

Combinar columnas con cbind

La funci贸n cbind une vectores, data frames o matrices por columnas. Puedes combinar varios vectores de la misma longitud por columnas pas谩ndolos como entrada a cbind. La funci贸n devolver谩 una matriz con tantas columnas como vectores y tantas filas como elementos tengan los vectores.

x <- c(1, 2, 3)
y <- c("G1", "G2", "G3")

# Combinar dos vectores por columnas
cbind(x, y)
     x   y   
[1,] "1" "G1"
[2,] "2" "G2"
[3,] "3" "G3"

Tambi茅n puedes combinar un 煤nico valor num茅rico o de car谩cter con otro objeto. En este caso, el valor se repetir谩 para ajustarse a la longitud del otro objeto.

x <- c(1, 2, 3)

# Combinar un car谩cter con un vector
cbind("A", x)
         x  
[1,] "A" "1"
[2,] "A" "2"
[3,] "A" "3"

Agregar nuevas columnas

La funci贸n permite a帽adir columnas a un data frame o matriz pasando como entrada los data frames y las nuevas columnas.

df <- data.frame(a = c("A", "B", "C"), b = c(1, 2, 3))

x <- c("AA", "BB", "CC")

# A帽adir una nueva columna
cbind(df, x)
     x   y   
[1,] "1" "G1"
[2,] "2" "G2"
[3,] "3" "G3"

Combinar data frames

Adem谩s, puedes combinar varios data frames siempre que tengan el mismo n煤mero de filas, de lo contrario la funci贸n arrojar谩 un error.

df1 <- data.frame(a = c("A", "B", "C"), b = c(1, 2, 3))

df2 <- data.frame(c = c("D", "E", "F"), d = c(4, 5, 6))

# Combinar dos data frames
cbind(df1, df2)
  a b c d
1 A 1 D 4
2 B 2 E 5
3 C 3 F 6

Si el n煤mero de filas de los data frames no es el mismo obtendr谩s un error indicando 鈥arguments imply differing number of rows鈥.

Etiquetas de las columnas al combinar columnas

El argumento deparse.level de cbind determina las etiquetas de las columnas. Por defecto (1) la funci贸n utilizar谩 los nombres de columna de los objetos, si los hay, si se establece como 0 la salida no tendr谩 nombres de columna y si se pasa un 2 la funci贸n siempre construir谩 nombres de columna a partir de los valores de entrada.

x <- c(1, 2, 3)

# Combinar un entero y un vector
cbind(3, x, deparse.level = 0)
     [,1] [,2]
[1,]    3    1
[2,]    3    2
[3,]    3    3