Capítulo4 Importação

Aviso: Para ler a versão mais recente deste material, acesse: https://gustavojy.github.io/apostila-icdr/

Neste capítulo, iniciaremos a primeira etapa para começarmos a aplicar ciência de dados: a importação dos dados para o R. Deve-se ter em mente que um conjunto de dados pode estar em diversos formatos, seja em arquivo de texto, planilha Excel ou extensões de outros programas. Assim, para cada formato, haverá uma maneira específica de importá-los ao R. Nesta apostila, trataremos dos formatos mais usuais a serem importados: os arquivos texto e as planilhas Excel.

Como citado na seção 3.1, referente à criação de projetos no RStudio, devemos criar um projeto para cada trabalho realizado, logo, direcionar os arquivos a serem importados para o respectivo diretório, a fim de manter uma organização e facilitar o nosso acesso aos documentos necessários. Portanto, caso ainda não tenha criado um projeto, confira a seção referente ao tema.

A seguir, mostraremos como importar os dados em formato texto e planilha Excel. Para os exemplos, utilizaremos a base de dados referente a produção de cereais, extraída da FAOSTAT. Faça o download da pasta clicando aqui. Nela, estão presentes as mesmas bases de dados em diversos formatos de arquivos para que você possa acompanhar os exemplos a seguir.


4.1 Pacote readr

Com o pacote readr, podemos ler arquivos em formato de texto, como os .txt e os .csv.

library(readr)

O readr importa os arquivos no formato de tibbles, análogo aos data frames (seção 3.8). No capítulo 5 veremos mais detalhes sobre as tibbles. Neste momento, focaremos em como importar os dados para o R, para então, entendermos os diferentes formatos de dados. A seguir, estão apresentadas as funções a serem utilizadas de acordo com o formato do arquivo:

  • read_csv(): arquivos separados por vírgula;

  • read_csv2(): arquivos separados por ponto-e-vírgula;

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

  • read_delim(): arquivos separados por um delimitador genérico. Requer o argumento delim = para indicar qual o caractere que separa as colunas do arquivo texto;

  • read_table(): arquivos com colunas separadas por espaço.

Para entendermos melhor o que são separadores, basicamente, em um arquivo texto, as colunas do Excel são delimitadas por um operador, ou seja, um separador de colunas, podendo ser vírgulas, ponto-e-vírgulas, espaços, TAB ou um delimitador genérico. Para isso, o readr apresenta diferentes funções para conseguir importar estes arquivos no formato correto, de acordo com o tipo de arquivo e delimitador utilizado.

4.1.1 Ler arquivos texto

Importaremos arquivos texto nos formatos .csv e .txt.

Para ler um arquivo em .csv, cujo separador de colunas são as vírgulas, utilizamos a função read_csv().

cereais_csv <- read_csv(file = "cereais.csv")
Rows: 6179 Columns: 14
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (8): Domain Code, Domain, Area, Element, Item, Unit, Flag, Flag Description
dbl (6): Area Code, Element Code, Item Code, Year Code, Year, Value

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Ao importar o arquivo .csv, a função nos informa as dimensões do banco de dados (Rows e Columns), o delimitador considerado (Delimiter:) e a classe atribuída para cada variável (coluna). Podemos perceber que das 14 variáveis, em 8 foi atribuída a classe do tipo caractere (chr (8)) e em 6, a classe numérica (dbl (6)).

Devemos nos atentar a este passo, pois em algumas situações, a classificação das variáveis pode estar errada ou imprópria para o uso correto nas análises. Na subseção 4.1.2, apresentaremos o argumento col_types = para reclassificar as variáveis.

O argumento file = representa o caminho até o arquivo. Perceba que não foi preciso indicar o diretório do arquivo, pois esse se localiza na mesma pasta do projeto em uso. Caso o arquivo esteja em uma outra pasta presente no diretório do projeto em uso, devemos especificá-la dentro do caminho até o arquivo. Exemplificaremos o processo com a pasta de nome dados_importar.

cereais_csv <- read_csv(file = "dados_importar/cereais.csv")

Em algumas situações, as colunas dos arquivos .csv são separadas por ponto-e-vírgula. Esse tipo de arquivo costuma ser utilizado quando os separadores decimais são as vírgulas, como é o caso da sintaxe utilizada no Brasil. Nesse caso, deve-se utilizar a função read_csv2().

cereais_csv2 <- read_csv2(file = "cereais2.csv")


Já os arquivos .txt são lidos a partir da função read_delim(), sendo necessário indicar qual caractere é utilizado para separar as colunas do arquivo a ser importado.

No exemplo a seguir, importaremos um arquivo .txt, separado por tabulação, sendo que o código \t representa a tecla TAB.

cereais_txt <- read_delim(file = "cereais.txt", delim = "\t")

Também podemos importar o arquivo anterior a partir da função read_tsv(), pois considera a tabulação como separador. Assim, não precisamos utilizar o argumento delim =.

cereais2_tab <- read_tsv(file = "cereais.txt")


4.1.2 Outros argumentos

Alguns outros argumento estão presentes na maioria das funções de importação de arquivos do pacote readr. Essas funções auxiliam na organização do banco de dados, pois visam arrumar alguns detalhes antes mesmo de importá-los ao R. A seguir, citaremos alguns desses:

comment =

No caso de arquivos que possuem algum caractere padrão que precede os comentários, usamos esse argumento para indicar qual o caractere utilizado. Por exemplo, caso o caractere # venha antes de todos os comentários presentes em um arquivo, utilizamos o comment = "#" para que o arquivo importado venha sem a parte comentada;

cereais_csv <- read_csv(file = "cereais.csv",
                        comment = "#")

na =

Atribui valor NA a determinado caractere especificado no argumento. Aceita um vetor como objeto do argumento. Como exemplo, atribuiremos valor NA ao texto Brazil, presente na coluna Area, a fim de ilustrar o argumento.

cereais_csv <- read_csv(file = "cereais.csv",
                        na = "Brazil")

head(cereais_csv)
# A tibble: 6 × 14
  Domai…¹ Domain Area …² Area  Eleme…³ Element Item …⁴ Item  Year …⁵  Year Unit 
  <chr>   <chr>    <dbl> <chr>   <dbl> <chr>     <dbl> <chr>   <dbl> <dbl> <chr>
1 QC      Crops       21 <NA>     5312 Area h…      44 Barl…    1961  1961 ha   
2 QC      Crops       21 <NA>     5312 Area h…      44 Barl…    1962  1962 ha   
3 QC      Crops       21 <NA>     5312 Area h…      44 Barl…    1963  1963 ha   
4 QC      Crops       21 <NA>     5312 Area h…      44 Barl…    1964  1964 ha   
5 QC      Crops       21 <NA>     5312 Area h…      44 Barl…    1965  1965 ha   
6 QC      Crops       21 <NA>     5312 Area h…      44 Barl…    1966  1966 ha   
# … with 3 more variables: Value <dbl>, Flag <chr>, `Flag Description` <chr>,
#   and abbreviated variable names ¹​`Domain Code`, ²​`Area Code`,
#   ³​`Element Code`, ⁴​`Item Code`, ⁵​`Year Code`

col_names =

Por padrão, a função assume que a primeira linha da base de dados é o nome das colunas. Caso a base de dados não venha com os nomes das colunas, utilizamos o argumento col_names = FALSE.

cereais_csv <- read_csv(file = "cereais.csv",
                        col_names = F,
                        skip = 1)

head(cereais_csv)
# A tibble: 6 × 14
  X1    X2       X3 X4        X5 X6       X7 X8       X9   X10 X11     X12 X13  
  <chr> <chr> <dbl> <chr>  <dbl> <chr> <dbl> <chr> <dbl> <dbl> <chr> <dbl> <chr>
1 QC    Crops    21 Brazil  5312 Area…    44 Barl…  1961  1961 ha    31511 <NA> 
2 QC    Crops    21 Brazil  5312 Area…    44 Barl…  1962  1962 ha    28454 <NA> 
3 QC    Crops    21 Brazil  5312 Area…    44 Barl…  1963  1963 ha    30443 <NA> 
4 QC    Crops    21 Brazil  5312 Area…    44 Barl…  1964  1964 ha    31164 <NA> 
5 QC    Crops    21 Brazil  5312 Area…    44 Barl…  1965  1965 ha    33550 <NA> 
6 QC    Crops    21 Brazil  5312 Area…    44 Barl…  1966  1966 ha    41175 <NA> 
# … with 1 more variable: X14 <chr>

Perceba que a função atribui nomes genéricos para as colunas, o que dificulta a identificação das variáveis presentes no banco de dados. Para isso, com o mesmo argumento col_names =, podemos (re)nomear as colunas.

cereais_csv <- read_csv(file = "cereais.csv",
                        col_names = c("cd", "cod","ac", "pais", "ec",
                                      "elemento", "ic", "cultura", "yc",
                                      "ano", "unidade", "valor", "flag",
                                      "descricao"),
                        skip = 1)

head(cereais_csv)
# A tibble: 6 × 14
  cd    cod      ac pais      ec eleme…¹    ic cultura    yc   ano unidade valor
  <chr> <chr> <dbl> <chr>  <dbl> <chr>   <dbl> <chr>   <dbl> <dbl> <chr>   <dbl>
1 QC    Crops    21 Brazil  5312 Area h…    44 Barley   1961  1961 ha      31511
2 QC    Crops    21 Brazil  5312 Area h…    44 Barley   1962  1962 ha      28454
3 QC    Crops    21 Brazil  5312 Area h…    44 Barley   1963  1963 ha      30443
4 QC    Crops    21 Brazil  5312 Area h…    44 Barley   1964  1964 ha      31164
5 QC    Crops    21 Brazil  5312 Area h…    44 Barley   1965  1965 ha      33550
6 QC    Crops    21 Brazil  5312 Area h…    44 Barley   1966  1966 ha      41175
# … with 2 more variables: flag <chr>, descricao <chr>, and abbreviated
#   variable name ¹​elemento

Como exemplo, renomeamos as colunas com o argumento col_names = c(), sendo que cada coluna deve ser, obrigatoriamente, renomeada ou conter o mesmo nome anterior, porém reescrito dentro do vetor, na ordem correta. Perceba que temos que pular a primeira linha (skip = 1), pois após a renomeação, a primeira linha do data frame será o antigo nome das colunas. Por outro lado, caso a base da dados tenha vindo sem nome, o argumento skip não precisa estar presente.

col_types =

No caso de alguma coluna ser importada com a classe errada ou imprópria, utiliza-se tal argumento para alterar a classe. Será exemplificada a transformação da variável Element em fator e da variável Year em números inteiros.

cereais_csv <- read_csv(file = "cereais.csv",
                        col_types = cols(
                          Element = col_factor(),
                          Year = col_integer()))

class(cereais_csv$Element)
class(cereais_csv$Year)
[1] "factor"
[1] "integer"

locale =

Esse argumento define opções de formatações de certas localidades, como o idioma, formato de datas e horas, separador decimal e encoding. É utilizada dentro da função read_, tendo como objeto a função de mesmo nome, locale(). A seguir, veremos alguns exemplos de aplicações desse argumento.

# Função locale() - verifica quais padrões estão sendo utilizados
locale()
<locale>
Numbers:  123,456.78
Formats:  %AD / %AT
Timezone: UTC
Encoding: UTF-8
<date_names>
Days:   Sunday (Sun), Monday (Mon), Tuesday (Tue), Wednesday (Wed), Thursday
        (Thu), Friday (Fri), Saturday (Sat)
Months: January (Jan), February (Feb), March (Mar), April (Apr), May (May),
        June (Jun), July (Jul), August (Aug), September (Sep), October
        (Oct), November (Nov), December (Dec)
AM/PM:  AM/PM
# Troca os dias e meses para o padrão português
locale(date_names = "pt")
<locale>
Numbers:  123,456.78
Formats:  %AD / %AT
Timezone: UTC
Encoding: UTF-8
<date_names>
Days:   domingo (dom), segunda-feira (seg), terça-feira (ter), quarta-feira
        (qua), quinta-feira (qui), sexta-feira (sex), sábado (sáb)
Months: janeiro (jan), fevereiro (fev), março (mar), abril (abr), maio (mai),
        junho (jun), julho (jul), agosto (ago), setembro (set), outubro
        (out), novembro (nov), dezembro (dez)
AM/PM:  AM/PM
# Troca o separador decimal de ponto para vírgula
locale(decimal_mark = ",")
<locale>
Numbers:  123.456,78
Formats:  %AD / %AT
Timezone: UTC
Encoding: UTF-8
<date_names>
Days:   Sunday (Sun), Monday (Mon), Tuesday (Tue), Wednesday (Wed), Thursday
        (Thu), Friday (Fri), Saturday (Sat)
Months: January (Jan), February (Feb), March (Mar), April (Apr), May (May),
        June (Jun), July (Jul), August (Aug), September (Sep), October
        (Oct), November (Nov), December (Dec)
AM/PM:  AM/PM

Outro problema que podemos resolver com o argumento é o encoding de arquivos. Encoding é a forma como o computador traduz os caracteres replicados no R para valores binários. Há diversos tipos de encoding, sendo que o Windows utiliza um diferente em relação ao Linux e Mac. Com isso, é comum termos problemas de encoding no Windows quando um arquivo é criado em um desses sistemas operacionais, havendo a desconfiguração de letras com acentos e outros caracteres especiais após a importação para o R. A seguir, demonstraremos o que são os problemas de encoding no Windows.

poema_drummond <- "E agora, José? A festa acabou, a luz apagou, o povo sumiu, a noite esfriou, e agora, José? (...)"

# Verificando encoding no Windows
Encoding(poema_drummond)
[1] "UTF-8"
# Forçando problema de encoding no Windows
Encoding(poema_drummond) <- "UTF-8"
poema_drummond
[1] "E agora, José? A festa acabou, a luz apagou, o povo sumiu, a noite esfriou, e agora, José? (...)"

Para corrigir o encoding no Windows, devemos atribuir o encoding latin1.

Assim, dependendo de qual sistema operacional um arquivo foi executado, devemos converter para diferentes encoding.

# Dados via Windows: usuário de Windows, converter para "latin1"
read_csv("dados_via_Windows.csv", locale = locale(encoding = "latin1"))

# Dados via Linux/Mac: usuário de Windows, converter para "UFT-8"
read_csv("dados_via_linux_mac.csv", locale = locale(encoding = "UFT-8"))


Outra funcionalidade do argumento locale = é o de parsear valores. Esse termo, comum no meio da programação, significa arrumar ou formatar um “valor A” para um “valor B”, a partir das similaridades entre ambos.

Como exemplo, podemos converter números que estão em formato de caractere para o formato de números, efetivamente:

parse_number(c("5", "5.0", "5,0", "R$5.00", "5 a"))
[1]  5  5 50  5  5

Podemos realizar o mesmo procedimento especificando o parseamento:

parse_number("5,0", locale = locale(decimal_mark = ","))
[1] 5

Ainda, podemos parsear datas, de acordo com o idioma:

# Inglês
parse_date("08/July/2021",
           format = "%d/%B/%Y")
[1] "2021-07-08"
# Português
parse_date("08/Julho/2021",
           format = "%d/%B/%Y",
           locale = locale(date_names = "pt"))
[1] "2021-07-08"


Para conferir todos os argumentos presentes nas funções do pacote readr, podemos utilizar a função args(nome_da_função). Exemplificaremos com a função read_csv().

args(read_csv)
function (file, col_names = TRUE, col_types = NULL, col_select = NULL, 
    id = NULL, locale = default_locale(), na = c("", "NA"), quoted_na = TRUE, 
    quote = "\"", comment = "", trim_ws = TRUE, skip = 0, n_max = Inf, 
    guess_max = min(1000, n_max), name_repair = "unique", num_threads = readr_threads(), 
    progress = show_progress(), show_col_types = should_show_types(), 
    skip_empty_rows = TRUE, lazy = should_read_lazy()) 
NULL


4.1.3 Escrever arquivos texto

Também temos a opção de salvar uma base de dados contida no R para um formato específico de arquivo. Para tanto, utilizamos a função write_, acompanhada dos argumentos x = e file =, referentes, respectivamente, ao objeto a ser escrito e ao nome do arquivo a ser criado.

Nos exemplos a seguir, escreveremos dados para os formatos .csv e .txt. Utilizaremos os dados do mtcars, presente no banco de dados nativo do R.

# Arquivo .csv separado por vírgula
write_csv(x = mtcars, file = "mtcars.csv")

# Arquivo .csv separado por ponto-e-vírgula
write_csv2(x = mtcars, file = "mtcars.csv")

# Arquivo .txt, separado por tabulação
write_delim(x = mtcars, file = "mtcars.txt", delim = "\t")

O arquivo escrito estará localizado no diretório referente ao projeto em atividade. Caso queira definir outro local para armazenar o arquivo, especifique-o no argumento file =. Por exemplo, caso deseje salvar o arquivo em uma pasta chamada banco_de_dados, localizada no diretório do projeto em uso, devemos prosseguir da seguinte maneira:

# Arquivo .csv separado por vírgula
write_csv(x = mtcars, file = "banco_de_dados/mtcars.csv")

# Arquivo .csv separado por ponto-e-vírgula
write_csv2(x = mtcars, file = "banco_de_dados/mtcars.csv")

# Arquivo .txt, separado por tabulação
write_delim(x = mtcars, file = "banco_de_dados/mtcars.txt", delim = "\t")


4.2 Pacote readxl

4.2.1 Ler arquivos Excel

O pacote readxl lê e importa planilhas Excel em formato .xlsx e .xls. Para tanto, utilizamos a função read_excel(). Esta função identifica automaticamente qual a extensão do arquivo, seja .xlsx ou .xls.

library(readxl)

cereais_xlsx <- read_excel("cereais.xlsx")

Neste mesmo pacote, estão presentes alguns exemplos de arquivos nos formatos .xlsx e .xls. Para conferi-los, utilizamos a função readxl_example().

readxl_example()
 [1] "clippy.xls"    "clippy.xlsx"   "datasets.xls"  "datasets.xlsx"
 [5] "deaths.xls"    "deaths.xlsx"   "geometry.xls"  "geometry.xlsx"
 [9] "type-me.xls"   "type-me.xlsx" 

Para utilizar um destes dados, devemos verificar em qual diretório estão localizados. Vamos exemplificar com o arquivo "deaths.xlsx", salvando sua localização no objeto local_arquivo.

local_arquivo <- readxl_example("deaths.xlsx")
local_arquivo
[1] "C:/Users/Gustavo Jun/AppData/Local/R/win-library/4.2/readxl/extdata/deaths.xlsx"

Em alguns casos, um arquivo Excel pode conter diversas planilhas. Para verificar quais planilhas estão presentes, utilizamos a função excel_sheets().

excel_sheets(local_arquivo)
[1] "arts"  "other"

Perceba que o arquivo Excel deaths apresenta duas planilhas: “arts” e “other”. Para selecionar a planilha desejada, devemos utilizar o argumento sheet = dentro da função read_excel(). Caso não seja utilizado o argumento, por padrão, será selecionada a primeira planilha contida no arquivo.

# Primeira planilha
read_excel(local_arquivo)
# A tibble: 18 × 6
   `Lots of people`             ...2                     ...3  ...4  ...5  ...6 
   <chr>                        <chr>                    <chr> <chr> <chr> <chr>
 1 simply cannot resist writing <NA>                     <NA>  <NA>  <NA>  some…
 2 at                           the                      top   <NA>  of    thei…
 3 or                           merging                  <NA>  <NA>  <NA>  cells
 4 Name                         Profession               Age   Has … Date… Date…
 5 David Bowie                  musician                 69    TRUE  17175 42379
 6 Carrie Fisher                actor                    60    TRUE  20749 42731
 7 Chuck Berry                  musician                 90    TRUE  9788  42812
 8 Bill Paxton                  actor                    61    TRUE  20226 42791
 9 Prince                       musician                 57    TRUE  21343 42481
10 Alan Rickman                 actor                    69    FALSE 16854 42383
11 Florence Henderson           actor                    82    TRUE  12464 42698
12 Harper Lee                   author                   89    FALSE 9615  42419
13 Zsa Zsa Gábor                actor                    99    TRUE  6247  42722
14 George Michael               musician                 53    FALSE 23187 42729
15 Some                         <NA>                     <NA>  <NA>  <NA>  <NA> 
16 <NA>                         also like to write stuff <NA>  <NA>  <NA>  <NA> 
17 <NA>                         <NA>                     at t… bott… <NA>  <NA> 
18 <NA>                         <NA>                     <NA>  <NA>  <NA>  too! 
# Segunda planilha
read_excel(local_arquivo, sheet = 2)
# A tibble: 18 × 6
   `For the sake`  ...2                     ...3  ...4     ...5          ...6   
   <chr>           <chr>                    <chr> <chr>    <chr>         <chr>  
 1 <NA>            of consistency           <NA>  <NA>     in the        data l…
 2 which is really <NA>                     <NA>  <NA>     a             beauti…
 3 I will          keep making notes        <NA>  <NA>     <NA>          up her…
 4 Name            Profession               Age   Has kids Date of birth Date o…
 5 Vera Rubin      scientist                88    TRUE     10432         42729  
 6 Mohamed Ali     athlete                  74    TRUE     15358         42524  
 7 Morley Safer    journalist               84    TRUE     11635         42509  
 8 Fidel Castro    politician               90    TRUE     9722          42699  
 9 Antonin Scalia  lawyer                   79    TRUE     13220         42413  
10 Jo Cox          politician               41    TRUE     27202         42537  
11 Janet Reno      lawyer                   78    FALSE    14082         42681  
12 Gwen Ifill      journalist               61    FALSE    20361         42688  
13 John Glenn      astronaut                95    TRUE     7880          42712  
14 Pat Summit      coach                    64    TRUE     19159         42549  
15 This            <NA>                     <NA>  <NA>     <NA>          <NA>   
16 <NA>            has been really fun, but <NA>  <NA>     <NA>          <NA>   
17 we're signing   <NA>                     <NA>  <NA>     <NA>          <NA>   
18 <NA>            <NA>                     off   <NA>     now!          <NA>   
# Seleciona a segunda planilha, agora pelo seu nome
read_excel(local_arquivo, sheet = "other")
# A tibble: 18 × 6
   `For the sake`  ...2                     ...3  ...4     ...5          ...6   
   <chr>           <chr>                    <chr> <chr>    <chr>         <chr>  
 1 <NA>            of consistency           <NA>  <NA>     in the        data l…
 2 which is really <NA>                     <NA>  <NA>     a             beauti…
 3 I will          keep making notes        <NA>  <NA>     <NA>          up her…
 4 Name            Profession               Age   Has kids Date of birth Date o…
 5 Vera Rubin      scientist                88    TRUE     10432         42729  
 6 Mohamed Ali     athlete                  74    TRUE     15358         42524  
 7 Morley Safer    journalist               84    TRUE     11635         42509  
 8 Fidel Castro    politician               90    TRUE     9722          42699  
 9 Antonin Scalia  lawyer                   79    TRUE     13220         42413  
10 Jo Cox          politician               41    TRUE     27202         42537  
11 Janet Reno      lawyer                   78    FALSE    14082         42681  
12 Gwen Ifill      journalist               61    FALSE    20361         42688  
13 John Glenn      astronaut                95    TRUE     7880          42712  
14 Pat Summit      coach                    64    TRUE     19159         42549  
15 This            <NA>                     <NA>  <NA>     <NA>          <NA>   
16 <NA>            has been really fun, but <NA>  <NA>     <NA>          <NA>   
17 we're signing   <NA>                     <NA>  <NA>     <NA>          <NA>   
18 <NA>            <NA>                     off   <NA>     now!          <NA>   

Podemos verificar outros argumentos presentes nas funções do pacote readxl com a função args(nome_da_função). Exemplificaremos com a função read_excel().

args(read_excel)
function (path, sheet = NULL, range = NULL, col_names = TRUE, 
    col_types = NULL, na = "", trim_ws = TRUE, skip = 0, n_max = Inf, 
    guess_max = min(1000, n_max), progress = readxl_progress(), 
    .name_repair = "unique") 
NULL

Como se pode notar, há diversos argumentos idênticos aos demonstrados na subseção 4.1.2, referente ao pacote readr. Contudo, na função read_excel() não temos o argumento locale, sendo uma falta relevante para que possamos resolver problemas relacionados à temática. Como alternativa, podemos priorizar a importação de arquivos texto ao R, ao invés de planilhas Excel, sendo facilmente resolvido salvando o Excel em formato texto, seja em .csv ou .txt.


4.2.2 Escrever arquivos Excel

Também podemos escrever um arquivo Excel em formato .xlsx utilizando a função write_xlsx, contida no pacote writexl. Utilizaremos novamente os dados mtcars para demonstração.

install.packages("writexl")
library(writexl)

write_xlsx(mtcars, "mtcars.xlsx")


4.3 Importação via URL

Uma opção prática para importar dados presentes na internet, diretamente do ambiente do RStudio, se dá via URL, ou seja, a partir do endereço web em que se localiza o banco de dados para download. Esse método permite a importação direta do banco de dados para o R, sem a necessidade de realizar o download de um arquivo para o seu computador.

Como exemplo, importaremos os dados sobre preços praticados por revendedores de combustíveis automotivos e de gás liquefeito de petróleo, no 2º semestre de 2021, coletados do Portal Brasileiro de Dados Abertos.

url <- "https://www.gov.br/anp/pt-br/centrais-de-conteudo/dados-abertos/arquivos/shpc/dsas/ca/ca-2021-02.csv"

dados_comb <- read_csv2(file = url)

head(dados_comb)
# A tibble: 6 × 16
  Regiao …¹ Estad…² Munic…³ Revenda CNPJ …⁴ Nome …⁵ Numer…⁶ Compl…⁷ Bairro Cep  
  <chr>     <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>  <chr>
1 NE        CE      MARACA… "BEZER… 05.397… RODOVI… S/N     <NA>    PARQU… 6191…
2 NE        CE      MARACA… "BEZER… 05.397… RODOVI… S/N     <NA>    PARQU… 6191…
3 NE        CE      MARACA… "BEZER… 05.397… RODOVI… S/N     <NA>    PARQU… 6191…
4 NE        CE      MARACA… "BEZER… 05.397… RODOVI… S/N     <NA>    PARQU… 6191…
5 NE        CE      MARACA… "LUIZA… 03.602… ESTRAD… S/N     <NA>    KAGADO 6190…
6 NE        CE      MARACA… "LUIZA… 03.602… ESTRAD… S/N     <NA>    KAGADO 6190…
# … with 6 more variables: Produto <chr>, `Data da Coleta` <chr>,
#   `Valor de Venda` <dbl>, `Valor de Compra` <lgl>, `Unidade de Medida` <chr>,
#   Bandeira <chr>, and abbreviated variable names ¹​`Regiao - Sigla`,
#   ²​`Estado - Sigla`, ³​Municipio, ⁴​`CNPJ da Revenda`, ⁵​`Nome da Rua`,
#   ⁶​`Numero Rua`, ⁷​Complemento

Para isso, o primeiro passo é salvar a URL em um objeto; no caso, denominamos o objeto de url. Por se tratar de um arquivo .csv, delimitado por ;, utilizamos a função read_csv2() para importar o arquivo, tendo como argumento file = a URL salva no objeto url.


4.4 Banco de dados

A seguir, listaremos alguns sites que fornecem uma grande variedade de base de dados públicas. Confira algum que apresente dados de seu interesse, para que você possa aplicá-los futuramente no R.


Como pudemos perceber, a importação de dados para o R não é uma tarefa difícil. Devemos nos atentar ao formato em que o arquivo está, a fim de utilizarmos a função de importação correta. Dependendo da fonte dos dados, esses podem vir com algumas configurações indesejadas, o que pode ser resolvido antes mesmo de importarmos os dados, utilizando funções e argumentos específicos para cada necessidade. Por fim, também conhecemos funções que escrevem os dados do R para diversos formatos, seja arquivos texto ou planilhas Excel.

No próximo capítulo, trataremos da etapa de arrumar os dados. Serão apresentadas as tibbles, um tipo de data frame que utilizaremos muito, além de explorarmos as funcionalidades presentes no pacote tidyr, a fim de obtermos uma base de dados organizada e fácil de se trabalhar.