Dividir columnas por número de caracteres

Actualizado: mar 8


Gracias a Excel, estamos acostumbrados a nombrar el proceso de separar una columna en varias como "desconcatenar". En R puedes realizar la separación de columnas gracias a un caracter divisorio llamado separado, que puede ser un punto, un guión, o cualquier carácter que deseemos. Lo anterior se puede lograr utilizando funciones como separate() de la librería plyr, incluso más eficientemente con la función cSplit() de la librería splitstackshape. No obstante, cuando no tenemos separadores y únicamente queremos separar en base a un número exacto de caracteres, estas funciones simplemente "no funcionan".

Descarga el script del tutorial aquí.


Comenzamos

Antes que nada, activa la librería tidyverse para poder usar pipe y las a funciones de dplyr.

library(tidyverse)

Luego, creemos una data frame de ejemplo.

df <- data.frame(fechas= c(20210306, 20210304,20210301,20210202))

Visualizamos el resultado

View(df)
     fechas
 1 20210306
 2 20210304
 3 20210301
 4 20210202

Usaremos la función substr() para subdividir un "vector" indicando una posición inicial y final de corte. Por ejemplo, el siguiente código cortaría el "vector" de un solo elemento "esternocleidomastoideo" definiendo diferentes posiciones iniciales y finales sobre el elemento del vector.

substr("esternocleidomastoideo", 1,7)
[1] "esterno"

substr("esternocleidomastoideo", 8,13)
[1] "cleido"

substr("esternocleidomastoideo", 14,22)
[1] "mastoideo"

Si tenemos un vector con más elementos, el corte se aplica sobre todos de la misma manera:

substr(c("Enero", "Febrero"), 1,3)
[1] "Ene" "Feb"

Esta función se puede aplicar sobre vectores numéricos o de tipo carácter. Recuerda que cada columna de una data.frame o tibble también es condiderada un "vector".


Usemos la función substr() sobre la columna fechas de la data frame df que creamos anteriormente, separando años, meses y días:

df %>% mutate(aa = substr(fechas, 1,4),
              mm = substr(fechas, 5,6),
              dd = substr(fechas, 7,8))

Como resultado obtenemos

    fechas   aa mm dd
1 20210306 2021 03 06
2 20210304 2021 03 04
3 20210301 2021 03 01
4 20210202 2021 02 02

¡Genial! Tutorial completado.


53 vistas1 comentario

Entradas Recientes

Ver todo