R Academy · Aula

Analisando arquivos TSV e de largura fixa

Use read_tsv() e read_fwf() para dados separados por tabulação e de largura fixa.

Aula 2 de 413 etapas

Analisando arquivos TSV e de largura fixa é uma aula grátis de R Academy no CoddyKit. Esta é a aula 2 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.

Além de CSV: outros formatos de arquivo

Nem todos os dados tabulares são fornecidos como CSV. Arquivos separados por tabulação (TSV), arquivos delimitados por barras verticais e arquivos de formato de largura fixa (FWF) são comuns em dados governamentais, sistemas legados e bancos de dados científicos. O pacote readr lida com todos esses formatos usando uma sintaxe consistente.

library(readr)

# readr's flat file readers:
# read_csv()    - comma-separated
# read_csv2()   - semicolon-separated (European)
# read_tsv()    - tab-separated
# read_delim()  - any delimiter
# read_fwf()    - fixed-width format
# read_lines()  - raw text, one line per element

cat('All readr functions return tibbles with the same interface!')

read_tsv() — valores separados por tabulação

read_tsv() lê arquivos delimitados por tabulação. Ele aceita os mesmos argumentos que read_csv() — col_types, na, skip etc. TSV é preferível a CSV quando os dados contêm vírgulas, como em endereços e descrições.

library(readr)

# Simulated TSV using \t as delimiter
tsv_data <- 'name\tscore\tcity
Alice Smith\t85\tNew York, NY
Bob Jones\t92\tLos Angeles, CA
Carol White\t78\tChicago, IL'

# Note: cities contain commas — TSV handles this cleanly
df <- read_tsv(tsv_data, show_col_types=FALSE)
print(df)

read_delim() — qualquer delimitador

read_delim(file, delim='|') lida com qualquer delimitador de um único caractere. Arquivos delimitados por barras verticais (|) são comuns em armazéns de dados e exportações governamentais, pois as barras verticais raramente aparecem nos próprios dados.

library(readr)

# Pipe-delimited data
pipe_data <- 'ID|Name|Department|Salary
1|Alice Smith|Engineering|95000
2|Bob Jones|Marketing|72000
3|Carol White|HR|65000'

df <- read_delim(pipe_data, delim='|', show_col_types=FALSE)
print(df)

read_delim() para arquivos separados por ponto e vírgula

Arquivos CSV europeus costumam usar ponto e vírgula como delimitador e vírgula como separador decimal. read_csv2() é um atalho para read_delim(delim=';', locale=locale(decimal_mark=',')); você também pode configurar read_delim() diretamente.

library(readr)

# European-style: semicolon delimiter, comma decimal
european_data <- 'name;price;quantity
Widget;9,99;100
Gadget;24,50;50
Sprocket;4,75;200'

# Method 1: read_csv2() shortcut
df1 <- read_csv2(european_data, show_col_types=FALSE)
print(df1)

# Method 2: explicit read_delim
# read_delim(data, delim=';', locale=locale(decimal_mark=','))

read_fwf() — formato de largura fixa

Arquivos de largura fixa não têm delimitadores — as colunas são identificadas por suas posições de caracteres. São comuns em exportações de computadores centrais legados e em dados governamentais. Use fwf_widths() para especificar as larguras das colunas ou fwf_cols() para as posições inicial e final.

library(readr)

# Fixed-width data (positions matter!)
fwf_data <- 'Alice    085NYC      
Bob      092LA       
Carol    078Chicago  '

# Column widths: name=9, score=3, city=10
df <- read_fwf(
  fwf_data,
  col_positions = fwf_widths(
    widths = c(9, 3, 10),
    col_names = c('name','score','city')
  ),
  show_col_types = FALSE
)

print(df)

fwf_positions() para colunas inicial e final

fwf_positions(start, end, col_names) especifica as posições exatas inicial e final dos caracteres (com índice iniciado em 1). Isso é preciso quando as larguras das colunas variam ou quando você precisa ignorar algumas colunas não as especificando.

library(readr)

# Another fixed-width example using start/end positions
fwf_data <- '001ALICE   02024-01-15
002BOB     01   2024-02-20
003CAROL   03   2024-03-10'

df <- read_fwf(
  fwf_data,
  col_positions = fwf_positions(
    start = c(1, 4, 11, 14),
    end   = c(3, 10, 12, 23),
    col_names = c('id','name','score','date')
  ),
  show_col_types = FALSE
)

print(df)

fwf_empty() — detectando automaticamente as larguras

fwf_empty(file, col_names) tenta detectar automaticamente os limites das colunas com base nos intervalos de espaços em branco. Forneça os nomes das colunas separadamente. Funciona melhor com arquivos FWF bem formatados e com espaçamento consistente.

library(readr)

# Well-spaced fixed-width data
fwf_data <- 'name     score  grade
Alice    85     B
Bob      92     A
Carol    78     C
Dave     88     B'

# Auto-detect column positions from whitespace
df <- read_fwf(
  fwf_data,
  col_positions = fwf_empty(fwf_data, col_names=c('name','score','grade')),
  show_col_types = FALSE
)

print(df)

read_lines() — análise de texto bruto

read_lines(file) lê um arquivo de texto uma linha por vez, retornando um vetor de caracteres. Essa é a função de leitura de nível mais baixo — use-a quando precisar pré-processar as linhas antes da análise, por exemplo, para filtrar comentários ou lidar com formatos inconsistentes.

library(readr)

# Read lines and filter manually
raw_text <- '# Comment line
# Another comment
name,score
Alice,85
Bob,92'

lines <- read_lines(raw_text)
print(lines)

# Filter out comment lines
clean_lines <- lines[!startsWith(lines, '#')]
df <- read_csv(paste(clean_lines, collapse='\n'), show_col_types=FALSE)
print(df)

read_lines() para inspeção incremental

read_lines(file, n_max=10) visualiza apenas as primeiras linhas de qualquer arquivo de texto antes de você realizar uma leitura completa. Isso é útil para diagnosticar problemas de codificação, encontrar a linha de cabeçalho real ou detectar o tipo de delimitador.

library(readr)

# Preview first few lines before reading
sample_file <- 'METADATA: version 1.2
DATE: 2024-01-15
---
id,name,value
1,Alice,100
2,Bob,200'

# Inspect to find where the data starts
preview <- read_lines(sample_file, n_max=4)
print(preview)
# From this we know: skip=3, then read as CSV

Lidando com problemas de codificação

Caracteres que não são ASCII (acentos e alfabetos não latinos) exigem a especificação da codificação correta. Use locale(encoding='latin1') ou locale(encoding='UTF-8') dentro de read_csv() ou read_delim(). O padrão é UTF-8.

library(readr)

# Detect encoding of a file
# readr::guess_encoding('file.csv')  # Returns likely encodings

# Specify encoding explicitly
# df <- read_csv('data_latin1.csv',
#   locale = locale(encoding = 'latin1'))

# For UTF-8 with BOM (common in Windows exports):
# df <- read_csv('data_utf8bom.csv',
#   locale = locale(encoding = 'UTF-8-BOM'))

cat('Encoding matters for accented chars: \xc3\xa9 (UTF-8 for e-acute)\n')
print(guess_encoding(chartr('\xe9','e','caf\xe9')))

Escolhendo a função de leitura correta

Guia rápido para escolher a função correta do readr:

  • Vírgulas → read_csv()
  • Ponto e vírgula + decimais europeus → read_csv2()
  • Tabulações → read_tsv()
  • Outros delimitadores → read_delim(delim='|')
  • Posições fixas → read_fwf()
  • Inspeção bruta → read_lines()
library(readr)

# Quick comparison of delimiters
csv_data  <- 'a,b,c\n1,2,3'
tsv_data  <- 'a\tb\tc\n1\t2\t3'
pipe_data <- 'a|b|c\n1|2|3'

read_csv(csv_data, show_col_types=FALSE)
read_tsv(tsv_data, show_col_types=FALSE)
read_delim(pipe_data, delim='|', show_col_types=FALSE)

Verificação rápida

Qual função do readr é a melhor escolha para ler um arquivo cujas colunas são definidas por posições fixas de caracteres, sem delimitadores?

Recapitulação: arquivos TSV e de largura fixa

Principais conclusões sobre formatos de arquivos simples que não são CSV:

  • read_tsv() — separado por tabulações; melhor quando os dados contêm vírgulas
  • read_delim(delim='|') — qualquer delimitador de um único caractere
  • read_csv2() — separado por ponto e vírgula, com separadores decimais europeus
  • read_fwf(fwf_widths(c(10,5,8))) — largura fixa definida pelas larguras das colunas
  • read_fwf(fwf_positions(start, end)) — largura fixa definida por posições exatas
  • read_lines(file, n_max=10) — inspeciona as linhas brutas antes da análise
  • Todas as funções compartilham os mesmos argumentos col_types, na, skip e locale()
library(readr)

# Pipe-delimited with custom NA values
df <- read_delim(
  'ID|Name|Score|City
  1|Alice|85|NYC
  2|Bob|N/A|N/A
  3|Carol|78|Chicago',
  delim = '|',
  na = c('', 'NA', 'N/A'),
  show_col_types = FALSE
)

print(df)
print(colSums(is.na(df)))
Grátis para começar

Aprenda R com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
43
Aulas
159

Perguntas Frequentes

A aula “Analisando arquivos TSV e de largura fixa” é grátis?

Sim — o texto completo de “Analisando arquivos TSV e de largura fixa” é 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 “Analisando arquivos TSV e de largura fixa”?

Use read_tsv() e read_fwf() para dados separados por tabulação e de largura fixa. 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 2 de 4.

Quanto tempo leva a aula “Analisando arquivos TSV e de largura fixa”?

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