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