5.2 O pacote readr

O pacote readrdo tidyverse é utilizado para importar arquivos de texto, como .txt ou .csv, para o R. Para carregá-lo, rode o código:

O readr transforma arquivos de textos em tibbles usando as funções:

  • read_csv(): para arquivos separados por vírgula.

  • read_tsv(): para arquivos separados por tabulação.

  • read_delim(): para arquivos separados por um delimitador genérico. O argumento delim= indica qual caracter separa cada coluna no arquivo de texto.

  • read_table(): para arquivos de texto tabular com colunas separadas por espaço.

  • read_fwf(): para arquivos compactos que devem ter a largura de cada coluna especificada.

  • read_log(): para arquivos padrões de log.

Vamos mostrar na próxima seção como importar as extensões mais comuns: .csv e .txt.

5.2.1 Lendo arquivos de texto

Como exemplo, utilizaremos uma base de filmes do IMDB, gravada em diversos formatos. O download dos arquivos pode ser realizado a partir deste repositório.

Primeiro, vamos ler a base em formato .csv.

## Parsed with column specification:
## cols(
##   titulo = col_character(),
##   ano = col_double(),
##   diretor = col_character(),
##   duracao = col_double(),
##   cor = col_character(),
##   generos = col_character(),
##   pais = col_character(),
##   classificacao = col_character(),
##   orcamento = col_double(),
##   receita = col_double(),
##   nota_imdb = col_double(),
##   likes_facebook = col_double(),
##   ator_1 = col_character(),
##   ator_2 = col_character(),
##   ator_3 = col_character()
## )

A mensagem retornada pela função indica qual classe foi atribuída para cada coluna. Repare que o argumento file= representa o caminho até o arquivo. Se o arquivo a ser lido não estiver no diretório de trabalho da sua sessão, você precisa especificar o caminho até o arquivo.

A maioria das funções de leitura do readr possuem argumentos muito úteis para resolver problemas de importação:

  • col_names=: indica se a primeira linha da base contém ou não o nome das colunas. Também pode ser utilizado para (re)nomear colunas.

  • col_types=: caso alguma coluna seja importada com a classe errada (uma coluna de números foi importada como texto, por exemplo), você pode usar esse argumento para especificar a classe das colunas.

  • locale=: útil para tratar problema de encoding.

  • skip=: pula linhas no começo do arquivo antes de iniciar a importação. Útil para quando o arquivo a ser importado vem com metadados ou qualquer tipo de texto nas primeiras linhas, antes da base.

  • na=: indica quais strings deverão ser considaras NA na hora da importação.

Em alguns países, como o Brasil, as vírgulas são utilizadas para separar as casas decimais dos números, inviabilizando o uso de arquivos .csv. Nesses casos, quando a vírgula é o separador de decimal, os arquivos .csv passam a ser separados por ponto-e-vírgula. Para importar bases de arquivos separados por ponto-e-vírgula no R, basta usar a função read_csv2().

Arquivos .txt em geral podem ser lidos com a função read_delim(). Além do caminho até o arquivo, você também precisa indicar qual é o caractere utilizado para separar as colunas da base. Um arquivo separado por tabulação, por exemplo, pode ser lido utilizando a o código abaixo. O código \t é uma forma textual de representar a tecla TAB.

Repare que a sintaxe é igual a da função read_csv(). Em geral, as funções de importação do tidyverse terão sintaxe e comportamento muito parecidos.

A seguir, vamos falar das funções parse_(), muito úteis para tratar problemas na classe das variáveis na hora da importação.

5.2.2 Parseando valores

5.2.3 Locale

5.2.4 Escrevendo arquivos de texto

Para a maioria das funções read_, existe uma respectiva função write_. Essas funções servem para salvar bases em um formato específico de arquivo. Além do caminho/nome do arquivo a ser criado, você também precisa passar o objeto que será escrito. Para o arquivo criado funcionar corretamente, você precisa especificar a extensão correta no nome do arquivo.

5.2.5 Arquivos .rds

A linguagem R tem uma extensão própria de arquivos binários chamada RDS ou .rds. Essa extensão pode ser utilizada para guarda qualquer tipo de objeto do R, inclusive bases de dados. Temos duas principais vantagens ao utilizarmos essa extensão para salvarvamos as nossas bases:

  • ele salva as classes especificadas para as colunas;

  • ele pode ser compactado, gerando arquivos muito menores.

A desvantagem é que ele só poderá ser lido dentro do R.

Para criar um arquivo .rds, utilize a função write_rds().

O argumento compress é opcional e indica qual o tipo de compactação deve ser feito. O padrão é não compactar.

Para ler um arquivo .rds de volta para o R, utilizamos a função read_rds(). Repare que essa função não possui outros argumentos, pois o objeto importado será exatamente igual ao objeto que foi gravado no arquivo.

Exercícios

  1. Qual a diferença entre as funções read_csv() e read_csv2()?

  2. Leia o arquivo imdb.csv utilizando a função read_delim().

  3. Escreva a base mtcars em um arquivo mtcars.csv que não contenha o nome das colunas.

  4. Use a função write_rds() para salvar em arquivos

  1. Um número.
  2. Um vetor de strings.
  3. Uma lista com valores númericos, textuais e lógicos.
  4. As 3 primeiras colunas da base mtcars.
  1. Utilize a função read_rds() para importar de volta para o R os arquivos criados no exercício 4.

Curso-R