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çãoconvert = TRUE— converte automaticamente os tipos dos resultados da divisãoremove = FALSE— mantém a coluna original nas duas funçõesunite(col, ..., sep)— combina várias colunas em uma coluna de textoseparate_rows(col, sep)— divide valores delimitados em várias linhas (não colunas)- Os argumentos
extraefilltratam 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
- De formato amplo para longo com pivot_longer()
- De formato longo para amplo com pivot_wider()
- separate() e unite() para colunas de strings
- Aninhando e desaninhando quadros de dados