0Pricing
R Academy · Aula

Gravando dados em vários formatos

Exporte quadros de dados para CSV, Excel e RDS com write_csv() e writexl.

Gravando dados em vários formatos é uma aula grátis de R Academy no CoddyKit. Esta é a aula 4 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.

Gravando dados do R

Ler dados é apenas metade do trabalho — também é necessário salvar os resultados. R oferece suporte a vários formatos de saída: CSV para compatibilidade universal, RDS para preservar objetos R exatamente, Parquet para análises de alto desempenho e muito mais. Escolha o formato com base no público e no caso de uso.

library(readr)

# Create a sample data frame to write
df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85.5, 92.0, 78.3),
  grade = c('B','A','C'),
  passed = c(TRUE, TRUE, TRUE)
)

print(df)
cat('\nWe will save this in multiple formats!')

write_csv() — salvar como CSV

write_csv(df, 'file.csv') salva um quadro de dados como um arquivo separado por vírgulas. Por padrão, não grava os nomes das linhas (ao contrário de write.csv()). O resultado é sempre codificado em UTF-8. A função retorna o quadro de dados de forma invisível, portanto pode ser usada em encadeamentos.

library(readr)

df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85, 92, 78)
)

# Write to /tmp for demonstration
write_csv(df, '/tmp/students.csv')

# Verify by reading back
read_csv('/tmp/students.csv', show_col_types=FALSE)

Opções de write_csv()

write_csv() aceita várias opções: na='NA' controla como os valores NA são gravados, append=TRUE adiciona dados ao final de um arquivo existente, col_names=FALSE omite o cabeçalho e quote controla quando colocar os campos entre aspas.

library(readr)

df <- data.frame(
  name = c('Alice','Bob'),
  city = c('New York','Los,Angeles'),  # Contains comma
  score = c(85, NA)
)

# na='' writes NA as empty string (common Excel convention)
write_csv(df, '/tmp/test_write.csv', na='')
cat(paste(read_lines('/tmp/test_write.csv'), collapse='\n'))

write_tsv() — saída separada por tabulações

write_tsv(df, 'file.tsv') salva os dados separados por tabulações. Esse formato é preferível quando os dados contêm vírgulas ou quando o sistema posterior espera TSV. As opções são as mesmas de write_csv().

library(readr)

df <- data.frame(
  address = c('123 Main St, NYC','456 Oak Ave, LA'),
  score = c(85, 92)
)

# TSV avoids delimiter conflict with commas in addresses
write_tsv(df, '/tmp/addresses.tsv')
cat(paste(read_lines('/tmp/addresses.tsv'), collapse='\n'))

saveRDS() — salvar qualquer objeto R

saveRDS(obj, 'file.rds') serializa qualquer objeto R no disco, usando o formato binário nativo do R. readRDS('file.rds') o restaura exatamente, preservando tipos de colunas, fatores, atributos e até objetos de modelos. O formato não é legível por pessoas, mas é totalmente portátil entre sessões do R.

library(readr)

df <- data.frame(
  name = c('Alice','Bob'),
  score = c(85.5, 92.0),
  grade = factor(c('B','A'), levels=c('A','B','C','D'))
)

# Save with full type preservation
saveRDS(df, '/tmp/students.rds')

# Restore exactly
df2 <- readRDS('/tmp/students.rds')
print(df2)
print(class(df2$grade))  # factor — preserved!

saveRDS() vs save() — diferença principal

saveRDS(obj, 'file.rds') salva um único objeto sem o respectivo nome. readRDS() permite atribuir a ele qualquer nome. save(obj1, obj2, 'file.RData') salva vários objetos nomeados; load() os restaura com os nomes originais (podendo substituir variáveis existentes).

# saveRDS: single object, flexible on load
model <- lm(mpg ~ wt, data=mtcars)
saveRDS(model, '/tmp/my_model.rds')
best_model <- readRDS('/tmp/my_model.rds')  # Any name!
cat('R-squared:', round(summary(best_model)$r.squared, 3), '\n')

# save: multiple named objects, fixed names on load
# save(model, mtcars, file='/tmp/workspace.RData')
# load('/tmp/workspace.RData')  # Restores 'model' and 'mtcars'

write_delim() — delimitador personalizado

write_delim(df, file, delim='|') grava os dados usando qualquer delimitador. Use essa função quando o sistema posterior espera um formato delimitado por barras verticais ou outro formato não padrão. As mesmas garantias de qualidade dos dados de write_csv() se aplicam.

library(readr)

df <- data.frame(
  id = 1:3,
  name = c('Alice','Bob','Carol'),
  value = c(100, 200, 150)
)

# Write pipe-delimited
write_delim(df, '/tmp/data.psv', delim='|')
cat(paste(read_lines('/tmp/data.psv'), collapse='\n'))

Saída para Excel com writexl

O pacote writexl (complementar ao readxl) grava quadros de dados no formato .xlsx: writexl::write_xlsx(df, 'file.xlsx'). Para várias planilhas, passe uma lista nomeada. Não é necessário instalar Java nem o Excel.

# writexl::write_xlsx() — example (library not always available)
# library(writexl)

df1 <- data.frame(name=c('Alice','Bob'), score=c(85,92))
df2 <- data.frame(region=c('East','West'), sales=c(100,200))

# Single sheet:
# write_xlsx(df1, '/tmp/students.xlsx')

# Multiple sheets (named list):
# write_xlsx(
#   list(students=df1, sales=df2),
#   '/tmp/report.xlsx'
# )

cat('writexl writes pure .xlsx without Java or Excel!')

Arquivos Parquet com arrow

O Apache Parquet é um formato de armazenamento colunar ideal para grandes conjuntos de dados: oferece boa compressão e leitura muito mais rápida que CSV em consultas orientadas por colunas. O pacote arrow fornece write_parquet() e read_parquet().

# arrow::write_parquet() concept
# library(arrow)

# Large CSV -> Parquet (10-100x smaller, 10-100x faster reads)
# df <- read_csv('big_file.csv')
# write_parquet(df, 'big_file.parquet')
# df_back <- read_parquet('big_file.parquet')

# Parquet benefits:
# - Columnar: only reads columns you need
# - Compressed: ~10x smaller than CSV
# - Typed: no type re-guessing on read
# - Partitioned: split by date/region for parallel reads

cat('Parquet is the modern standard for large-scale analytics in R!')

Gravando dados em um fluxo de processamento

write_csv() e saveRDS() retornam sua entrada de forma invisível, o que permite usá-las dentro de um encadeamento sem interromper o fluxo. Insira uma etapa de gravação no meio do fluxo de processamento, usando write_csv() como ponto de verificação para garantir a reprodutibilidade.

library(readr)
library(dplyr)

# Write mid-pipeline as a checkpoint
final_result <- data.frame(
  region=c('East','West','North'),
  sales=c(100,200,80)
) %>%
  mutate(pct = round(100*sales/sum(sales),1)) %>%
  {. ->> checkpoint_df; .} %>%  # Save checkpoint
  filter(sales > 90)

write_csv(checkpoint_df, '/tmp/checkpoint.csv')
print(final_result)

Guia para escolher o formato

A escolha do formato de saída correto depende do seu objetivo:

  • CSV/TSV: universal, legível por pessoas, qualquer pessoa pode abri-lo
  • RDS: de R para R, preserva exatamente todos os tipos e atributos
  • xlsx: usuários corporativos, consumidores do Excel
  • Parquet: grandes volumes de dados, fluxos de análise, sistemas de produção
  • JSON: APIs, dados aninhados ou hierárquicos (jsonlite::toJSON())
library(readr)

df <- data.frame(
  id = 1:5,
  value = c(10.5, 20.3, 15.7, 30.1, 25.8)
)

# CSV — universal
write_csv(df, '/tmp/data.csv')

# TSV — when commas are in data
write_tsv(df, '/tmp/data.tsv')

# RDS — R-native, type-preserving
saveRDS(df, '/tmp/data.rds')

cat('Files created:\n')
cat('CSV size:', file.size('/tmp/data.csv'), 'bytes\n')
cat('RDS size:', file.size('/tmp/data.rds'), 'bytes\n')

Verificação rápida

Qual é a principal vantagem de saveRDS() em relação a write_csv() para salvar dados do R?

Revisão: gravando dados

Principais pontos sobre a gravação de dados do R:

  • write_csv(df, 'file.csv') — separado por vírgulas, sem nomes de linhas, UTF-8
  • write_tsv(df, 'file.tsv') — saída separada por tabulações
  • write_delim(df, file, delim='|') — qualquer delimitador
  • saveRDS(obj, 'file.rds') — formato binário do R, preserva todos os tipos
  • readRDS('file.rds') — restaura com qualquer nome; load() restaura os nomes originais
  • writexl::write_xlsx() — saída para Excel, sem necessidade de Java
  • arrow::write_parquet() — formato colunar para grandes conjuntos de dados analíticos
library(readr)

df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85.5, 92.0, 78.3),
  grade = factor(c('B','A','C'))
)

# CSV: universal but loses factor
write_csv(df, '/tmp/demo.csv')
df_csv <- read_csv('/tmp/demo.csv', show_col_types=FALSE)
cat('CSV grade type:', class(df_csv$grade), '\n')  # character

# RDS: preserves factor
saveRDS(df, '/tmp/demo.rds')
df_rds <- readRDS('/tmp/demo.rds')
cat('RDS grade type:', class(df_rds$grade))  # factor

Perguntas Frequentes

A aula “Gravando dados em vários formatos” é grátis?

Sim — o texto completo de “Gravando dados em vários formatos” é 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 “Gravando dados em vários formatos”?

Exporte quadros de dados para CSV, Excel e RDS com write_csv() e writexl. 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 4 de 4.

Quanto tempo leva a aula “Gravando dados em vários formatos”?

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. Lendo arquivos CSV com read_csv()
  2. Analisando arquivos TSV e de largura fixa
  3. Importando arquivos do Excel com readxl
  4. Gravando dados em vários formatos
← Voltar para R Academy