0Pricing
R Academy · Lección

separate() y unite() para columnas de cadenas

Divida y combine valores de columnas que contengan varias piezas de información.

separate() y unite() para columnas de cadenas es una lección gratuita de R Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de R Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de R Academy incluye 4 lecciones en total.

Dividir y combinar columnas de texto

Los datos sin procesar suelen contener varias piezas de información agrupadas en una sola columna (por ejemplo, '2024-03-15' contiene el año, el mes y el día). Las funciones separate() y unite() de tidyr dividen una columna en varias o combinan varias en una.

library(tidyr)

# Date stored as a single string column
df <- data.frame(
  id = 1:4,
  date = c('2024-01-15','2024-03-22','2023-11-08','2024-06-30'),
  value = c(100, 200, 150, 175)
)

print(df)

separate() — Dividir una columna en varias

separate(df, col, into, sep) divide una columna de caracteres en varias columnas nuevas mediante un separador. El argumento into asigna los nombres de las columnas nuevas; sep es el delimitador (de forma predeterminada, cualquier carácter no alfanumérico).

library(tidyr)

df <- data.frame(
  id = 1:4,
  date = c('2024-01-15','2024-03-22','2023-11-08','2024-06-30')
)

# Split 'date' into year, month, day
separate(
  df,
  col = date,
  into = c('year','month','day'),
  sep = '-'
)

separate() con el argumento convert

De forma predeterminada, separate() crea columnas de caracteres. Establezca convert = TRUE para convertir automáticamente las columnas nuevas al tipo más adecuado (entero, numérico o lógico). Esto resulta especialmente útil para las columnas de año y mes.

library(tidyr)

df <- data.frame(
  event = c('2024-1','2024-2','2023-12'),
  score = c(85, 90, 78)
)

result <- separate(
  df,
  col = event,
  into = c('year','month'),
  sep = '-',
  convert = TRUE
)

print(result)
cat('year type:', class(result$year), '\n')
cat('month type:', class(result$month))

separate() con remove = FALSE

De forma predeterminada, separate() elimina la columna original. Establezca remove = FALSE para conservarla junto a las columnas nuevas resultantes de la división. Esto resulta útil si desea comprobar la división o conservar la columna original como referencia.

library(tidyr)

df <- data.frame(
  full_code = c('US-CA-001','US-TX-002','UK-LDN-003')
)

separate(
  df,
  col = full_code,
  into = c('country','state','code'),
  sep = '-',
  remove = FALSE   # Keep original column
)

separate() en posiciones fijas

En lugar de usar un delimitador, puede dividir en posiciones fijas de caracteres pasando un vector de enteros a sep. Los enteros positivos cuentan desde la izquierda; los negativos, desde la derecha.

library(tidyr)

# Product code: first 3 chars = category, next 4 = id
df <- data.frame(
  code = c('ABC1234','XYZ5678','DEF9012'),
  qty = c(10, 20, 15)
)

separate(
  df,
  col = code,
  into = c('category','product_id'),
  sep = 3    # Split after position 3
)

unite() — Combinar columnas en una

unite(df, col, ..., sep) combina varias columnas en una sola columna de caracteres. El primer argumento después de df es el nombre de la columna nueva, seguido de las columnas que se combinarán y, finalmente, la cadena separadora.

library(tidyr)

df <- data.frame(
  first = c('Alice','Bob','Carol'),
  last = c('Smith','Jones','White'),
  score = c(85, 90, 78)
)

unite(
  df,
  col = 'full_name',
  first, last,
  sep = ' '
)

unite() con remove = FALSE

Al igual que separate(), unite() elimina las columnas de origen de forma predeterminada. Establezca remove = FALSE para conservar las columnas originales junto a la nueva columna combinada. Resulta útil cuando necesita ambas formas.

library(tidyr)

df <- data.frame(
  year = c(2024, 2024, 2023),
  month = c(1, 3, 12),
  day = c(15, 22, 8)
)

unite(
  df,
  col = 'date_str',
  year, month, day,
  sep = '-',
  remove = FALSE
)

unite() para crear claves

Un uso habitual de unite() es crear claves compuestas combinando varias columnas identificadoras. Esto resulta útil antes de unir tablas que necesitan una clave común construida a partir de varios campos.

library(tidyr)
library(dplyr)

orders <- data.frame(
  year = c(2024, 2024, 2023),
  region = c('East','West','East'),
  seq_num = c(1, 1, 2)
)

orders_keyed <- orders %>%
  unite(col = 'order_key', year, region, seq_num, sep = '_')

print(orders_keyed)

separate_rows() — Dividir en varias filas

separate_rows(df, col, sep) divide una celda que contiene varios valores en filas independientes. Esto es diferente de separate(), que divide en columnas. Resulta útil cuando una celda contiene una lista de elementos separados por comas.

library(tidyr)

# Tags stored as comma-separated values in one cell
df <- data.frame(
  id = 1:3,
  title = c('Intro to R','Data Viz','ML Basics'),
  tags = c('r,beginner','r,ggplot,visualization','r,ml,modeling')
)

separate_rows(df, tags, sep = ',')

Encadenar separate() y unite()

Puede encadenar separate() y unite() en una secuencia para reformatear cadenas de fechas, corregir formatos incoherentes o crear nuevos identificadores compuestos a partir de columnas existentes.

library(tidyr)
library(dplyr)

# Reformat date from YYYY-MM-DD to DD/MM/YYYY
df <- data.frame(
  id = 1:3,
  date = c('2024-01-15','2024-03-22','2023-11-08')
)

df %>%
  separate(date, into=c('year','month','day'), sep='-') %>%
  unite(col='date_eu', day, month, year, sep='/')

Gestionar partes adicionales o faltantes

separate() tiene un argumento extra para los casos en que hay más partes que columnas en into: 'warn' (predeterminado), 'drop' (descarta las partes adicionales) o 'merge' (conserva la última parte sin dividir). De forma similar, fill gestiona los casos con menos partes: 'warn', 'right' o 'left'.

library(tidyr)

# Inconsistent data: some rows have 2 parts, some have 3
df <- data.frame(
  code = c('A-1','B-2-extra','C-3'),
  value = c(10, 20, 30)
)

# 'merge' keeps the last piece unsplit
separate(df, code, into=c('prefix','suffix'), sep='-',
         extra='merge')

Comprobación rápida

¿Qué función usaría para dividir las filas cuando una columna contiene valores separados por comas, como 'tag1,tag2,tag3', de modo que haya una fila por etiqueta?

Repaso: separate() y unite()

Conceptos clave de separate() y unite():

  • separate(col, into, sep) — divide una columna en varias columnas mediante un delimitador o una posición
  • convert = TRUE — convierte automáticamente el tipo de los resultados de la división
  • remove = FALSE — conserva la columna original en ambas funciones
  • unite(col, ..., sep) — combina varias columnas en una sola columna de texto
  • separate_rows(col, sep) — divide los valores delimitados en varias filas (no columnas)
  • Los argumentos extra y fill gestionan los resultados incoherentes de la división
library(tidyr)
library(dplyr)

df <- data.frame(
  id = 1:3,
  datetime = c('2024-01-15 09:30','2024-03-22 14:15','2023-11-08 11:45')
)

df %>%
  separate(datetime, into=c('date','time'), sep=' ') %>%
  separate(date, into=c('year','month','day'), sep='-', convert=TRUE) %>%
  separate(time, into=c('hour','minute'), sep=':', convert=TRUE)

Preguntas frecuentes

¿La lección «separate() y unite() para columnas de cadenas» es gratis?

Sí — el texto completo de «separate() y unite() para columnas de cadenas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de R Academy, actualiza a CoddyKit PRO. El curso de R Academy incluye 4 lecciones en total.

¿Qué aprenderé en «separate() y unite() para columnas de cadenas»?

Divida y combine valores de columnas que contengan varias piezas de información. Practicas R Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar R Academy?

No se requiere experiencia previa. R Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «separate() y unite() para columnas de cadenas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de R Academy?

Sí. Cada lección de R Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. De formato ancho a largo con pivot_longer()
  2. De formato largo a ancho con pivot_wider()
  3. separate() y unite() para columnas de cadenas
  4. Anidación y desanidación de data frames
← Volver a R Academy