0Pricing
R Academy · Aula

Lendo arquivos CSV com read_csv()

Importe arquivos delimitados com opções de inferência de tipos de colunas, salto de linhas e codificação.

Lendo arquivos CSV com read_csv() é uma aula grátis de R Academy no CoddyKit. Esta é a aula 1 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.

Por que usar readr em vez do R básico?

O R básico oferece read.csv(), mas a função read_csv() do pacote readr é mais rápida, retorna uma tibble (não um quadro de dados), oferece uma inferência de tipos padrão melhor e exibe mensagens informativas sobre os tipos das colunas detectados.

library(readr)

# read_csv() vs read.csv():
# 1. Returns a tibble (prints nicely, faster subsetting)
# 2. Does NOT convert strings to factors by default
# 3. Shows column specification message
# 4. Faster for large files

# Example with a simple inline CSV:
df <- read_csv('name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C')

print(df)
print(class(df))

read_csv() a partir de um caminho de arquivo

O uso mais comum é passar uma cadeia de caracteres com o caminho de um arquivo para read_csv(). A função detecta automaticamente a vírgula como delimitador, lê a primeira linha como cabeçalho e infere os tipos das colunas com base nas primeiras 1000 linhas.

library(readr)

# Reading from a file path (illustrative — file not present)
# df <- read_csv('data/sales_2024.csv')

# Reading from a URL also works:
# df <- read_csv('https://example.com/data.csv')

# Using a literal inline string for demonstration:
df <- read_csv('region,q1,q2,q3
East,100,120,115
West,200,195,210
North,80,85,90')

print(df)

col_types — especificando os tipos das colunas

Use col_types para substituir a inferência de tipos do readr. Passe uma cadeia compacta (um caractere por coluna: c=caractere, d=número de ponto flutuante, i=inteiro, l=lógico, D=data, _=ignorar) ou uma especificação cols().

library(readr)

df <- read_csv('id,date,amount,active
1,2024-01-15,99.99,TRUE
2,2024-02-20,149.50,FALSE
3,2024-03-10,75.00,TRUE',
# Compact: integer, Date, double, logical
col_types = 'iDdl')

print(df)
cat('\nColumn types:\n')
print(sapply(df, class))

cols() para especificar tipos explicitamente

Para ter mais controle, use cols() para indicar o tipo de cada coluna. Use as funções coletoras: col_double(), col_character(), col_integer(), col_date(format=), col_skip() e col_guess().

library(readr)

df <- read_csv('id,name,score,date
1,Alice,85.5,2024-01-15
2,Bob,92.0,2024-02-20
3,Carol,78.3,2024-03-10',
col_types = cols(
  id = col_integer(),
  name = col_character(),
  score = col_double(),
  date = col_date(format = '%Y-%m-%d')
))

print(df)
print(class(df$date))

Argumentos skip e n_max

skip=n ignora as primeiras n linhas antes da leitura (útil para metadados ou cabeçalhos de comentários). n_max=n lê no máximo n linhas de dados — ideal para visualizar arquivos grandes ou carregar apenas o primeiro bloco.

library(readr)

# File with metadata in first 2 lines
# (simulated with literal string)
df <- read_csv('# Generated 2024-01-15
# Source: internal DB
name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C
Dave,88,B',
skip = 2,     # Skip the 2 comment lines
n_max = 3     # Read only 3 data rows
)

print(df)

Argumento na — definindo valores ausentes

Por padrão, read_csv() trata cadeias vazias e NA como valores ausentes. Use o argumento na para especificar outras cadeias que devem ser lidas como NA — exemplos comuns: 'N/A', 'NULL', '-999', '.'.

library(readr)

df <- read_csv('name,score,city
Alice,85,NYC
Bob,N/A,NULL
Carol,78,.
Dave,-999,Chicago',
na = c('', 'NA', 'N/A', 'NULL', '.', '-999')
)

print(df)
cat('NAs per column:\n')
print(colSums(is.na(df)))

col_names — nomes personalizados para as colunas

Defina col_names = FALSE quando o arquivo não tiver uma linha de cabeçalho — o readr nomeará automaticamente as colunas como X1, X2 etc. Como alternativa, passe um vetor de caracteres para col_names a fim de especificar nomes personalizados e ignorar a linha de cabeçalho.

library(readr)

# File without headers
df <- read_csv('Alice,85,NYC
Bob,92,LA
Carol,78,Chicago',
col_names = c('name','score','city')
)

print(df)

# auto-names when no header:
df2 <- read_csv('1,2,3
4,5,6', col_names = FALSE)
print(df2)

locale() — lidando com formatos não padrão

locale() controla como o readr interpreta formatos específicos da localidade: separadores decimais (',' em dados europeus), formatos de data, codificação e separadores de milhares. Passe-o para read_csv(locale=...).

library(readr)

# European-style CSV: semicolons as delimiters, comma as decimal
# read_csv2() is shorthand for this locale
df <- read_csv2('name;price;qty
Alice;9,99;100
Bob;24,50;50',
locale = locale(decimal_mark=',')
)

print(df)

# For dates in non-ISO format:
parse_date('15/01/2024', format='%d/%m/%Y')

progress e show_col_types

Para arquivos grandes, read_csv() exibe uma barra de progresso. Defina progress=FALSE para ocultá-la (útil em scripts). show_col_types=FALSE desativa a mensagem sobre os tipos das colunas quando você já tiver verificado os tipos.

library(readr)

# Suppress progress and type messages for production scripts
df <- read_csv(
  'a,b,c
  1,x,TRUE
  2,y,FALSE',
  show_col_types = FALSE,
  progress = FALSE
)

print(df)

Problems() — diagnosticando falhas de análise

Quando o readr encontra valores que não correspondem ao tipo esperado, ele os substitui por NA e registra um aviso. Chame problems(df) para verificar exatamente quais linhas e colunas apresentaram problemas e quais eram os valores originais.

library(readr)

# Intentional type mismatch: 'N/A' in numeric column
df <- suppressWarnings(read_csv(
  'id,score
  1,85
  2,N/A
  3,92',
  col_types = cols(score = col_double())
))

print(df)
print(problems(df))

Lendo vários arquivos com map()

Combine readr com purrr::map() para ler e combinar por linhas vários arquivos CSV em uma única etapa. Esse padrão é essencial para processar divisões mensais ou trimestrais de dados armazenadas em arquivos separados.

library(readr)
library(purrr)
library(dplyr)

# Simulated: read and bind multiple CSV files
files <- c('q1.csv', 'q2.csv', 'q3.csv')

# In practice:
# all_data <- map_df(files, read_csv, show_col_types=FALSE)

# Demonstration with inline data:
q1 <- read_csv('month,sales\nJan,100\nFeb,120', show_col_types=FALSE)
q2 <- read_csv('month,sales\nApr,130\nMay,145', show_col_types=FALSE)

bind_rows(list(q1=q1, q2=q2), .id='quarter')

Verificação rápida

Como informar a read_csv() que os valores 'N/A' e '-99' devem ser tratados como ausentes (NA)?

Recapitulação: read_csv() com readr

Principais conclusões sobre a leitura de arquivos CSV com readr:

  • read_csv('file.csv') — lê CSV, retorna uma tibble e infere os tipos das colunas
  • col_types = 'idcl' ou cols(x=col_double()) — especificação explícita de tipos
  • skip=n — ignora linhas de cabeçalho ou metadados; n_max=n — limita o número de linhas lidas
  • na = c('N/A','NULL') — trata outras cadeias como NA
  • locale(decimal_mark=',') — lida com formatos numéricos europeus
  • show_col_types=FALSE — oculta informações de tipos em scripts
  • problems(df) — verifica falhas de análise
  • Combine com map_df(files, read_csv) para ler vários arquivos
library(readr)

# Production-ready read_csv() call
df <- read_csv(
  'name,score,city,active
  Alice,85,NYC,TRUE
  Bob,N/A,LA,FALSE
  Carol,78,NULL,TRUE',
  col_types = cols(
    name = col_character(),
    score = col_double(),
    city = col_character(),
    active = col_logical()
  ),
  na = c('', 'NA', 'N/A', 'NULL'),
  show_col_types = FALSE
)

print(df)

Perguntas Frequentes

A aula “Lendo arquivos CSV com read_csv()” é grátis?

Sim — o texto completo de “Lendo arquivos CSV com read_csv()” é 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 “Lendo arquivos CSV com read_csv()”?

Importe arquivos delimitados com opções de inferência de tipos de colunas, salto de linhas e codificaçã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 1 de 4.

Quanto tempo leva a aula “Lendo arquivos CSV com read_csv()”?

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