0Pricing
R Academy · Aula

separate() e unite() para colunas de strings

Divida e mescle valores de colunas que contenham várias partes de informação.

separate() e unite() para colunas de strings é uma aula grátis de R Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.

Divisão e combinação de colunas de texto

Os dados brutos frequentemente contêm várias informações agrupadas em uma única coluna (por exemplo, '2024-03-15' contém ano, mês e dia). As funções separate() e unite() do tidyr dividem uma coluna em várias ou combinam várias em uma.

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() — Divisão de uma coluna em várias

separate(df, col, into, sep) divide uma coluna de caracteres em várias colunas novas usando um separador. O argumento into nomeia as novas colunas; sep é o delimitador (por padrão: qualquer caractere não 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() com o argumento convert

Por padrão, separate() cria colunas de caracteres. Defina convert = TRUE para converter automaticamente as novas colunas para o tipo mais apropriado (inteiro, numérico ou lógico). Isso é especialmente útil para colunas de ano e mês.

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() com remove = FALSE

Por padrão, separate() remove a coluna original. Defina remove = FALSE para mantê-la junto às novas colunas resultantes da divisão. Isso é útil quando você deseja verificar a divisão ou conservar a coluna original para referência.

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() em posições fixas

Em vez de um delimitador, você pode dividir em posições fixas de caracteres passando um vetor de inteiros para sep. Inteiros positivos contam da esquerda; inteiros negativos contam da direita.

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() — Combinação de colunas em uma

unite(df, col, ..., sep) combina várias colunas em uma única coluna de caracteres. O primeiro argumento após df é o nome da nova coluna, seguido pelas colunas a combinar e, depois, pela cadeia de caracteres 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() com remove = FALSE

Assim como separate(), unite() remove as colunas de origem por padrão. Defina remove = FALSE para manter as colunas originais junto à nova coluna combinada. Isso é útil quando você precisa das duas 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 criar chaves

Um uso comum de unite() é criar chaves compostas combinando várias colunas identificadoras. Isso é útil antes de unir tabelas que precisam de uma chave compartilhada formada a partir de vários 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() — Divisão em várias linhas

separate_rows(df, col, sep) divide uma célula que contém vários valores em linhas separadas. Isso é diferente de separate(), que divide em colunas. É útil quando uma célula contém uma lista de itens separados por vírgulas.

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 = ',')

Encadeamento de separate() e unite()

Você pode encadear separate() e unite() em um pipeline para reformular cadeias de caracteres de datas, corrigir formatos inconsistentes ou criar novos identificadores compostos a partir de colunas 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='/')

Tratamento de partes extras ou ausentes

separate() tem um argumento extra para os casos em que há mais partes do que colunas em into: 'warn' (padrão), 'drop' (descarta as partes extras) ou 'merge' (mantém a última parte sem dividi-la). Da mesma forma, fill trata os casos com menos partes: 'warn', 'right' ou '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')

Verificação rápida

Qual função você usaria para dividir linhas quando uma coluna contém valores separados por vírgulas, como 'tag1,tag2,tag3', em uma linha por etiqueta?

Recapitulação: separate() e unite()

Principais aprendizados sobre separate() e unite():

  • separate(col, into, sep) — divide uma coluna em várias colunas por delimitador ou posição
  • convert = TRUE — converte automaticamente os tipos dos resultados da divisão
  • remove = FALSE — mantém a coluna original nas duas funções
  • unite(col, ..., sep) — combina várias colunas em uma coluna de texto
  • separate_rows(col, sep) — divide valores delimitados em várias linhas (não colunas)
  • Os argumentos extra e fill tratam resultados inconsistentes da divisão
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)

Perguntas Frequentes

A aula “separate() e unite() para colunas de strings” é grátis?

Sim — o texto completo de “separate() e unite() para colunas de strings” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.

O que vou aprender em “separate() e unite() para colunas de strings”?

Divida e mescle valores de colunas que contenham várias partes de informação. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar R Academy?

Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “separate() e unite() para colunas de strings”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de R Academy?

Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. De formato amplo para longo com pivot_longer()
  2. De formato longo para amplo com pivot_wider()
  3. separate() e unite() para colunas de strings
  4. Aninhando e desaninhando quadros de dados
← Voltar para R Academy