Um dos formatos mais utilizados para disponibilização de dados são os arquivos CSV (comma-separated values). Seus valores são separados por vígulas (,) - muitas vezes pode vir separado por ponto e vŕgula (;) De início utilizaremos os pacotes básicos do R para leitura de arquivos CSV, no entanto vale mencionar que existem outros pacotes que são bons para leitura de arquivos CSV como: readr e data.table. Também temos pacotes que lê arquivos em outros formatos como o pacote foreing.
Para poder ler o arquivo é necessário que o mesmo esteja no mesmo diretório de trabalho que está trabalhando.
# Estou chamando a tabela "CHEFES.csv" e afirmando que a primeira linha é o cabeçalho e que o separador é ponto e vírgula (;). Lembrando que, se você salvou o seu arquivo do Excel utilizando um teclado inglês o separador será vírgula, porém se utilizou um teclado em português seu separador será ponto e vírgula.
# Algumas formas de importas seus dados
chefes <- read.table(file="CHEFESmm.csv", header = T, sep = ";")
chefes.2 <- read.csv("CHEFESmm.csv", header = T, sep = ";")
chefes.3 <- read.csv2("CHEFESmm.csv")
View(chefes) # visualiza os dados
str(chefes) # visualiza o tipo de cada variável
## 'data.frame': 11 obs. of 9 variables:
## $ salário : Factor w/ 7 levels "15.000,00","3.000,00",..: 4 3 5 6 6 6 1 4 7 1 ...
## $ formação : Factor w/ 3 levels "médio","pós-graduação",..: 3 2 3 1 3 3 2 1 3 3 ...
## $ carga.horária: Factor w/ 4 levels "4,0","6,0","6,8",..: 4 4 4 2 2 2 4 4 3 2 ...
## $ qtde.pratos : int 15 25 10 15 18 23 20 13 12 16 ...
## $ vinhos : Factor w/ 2 levels "não","sim": 1 2 1 1 1 1 2 2 2 1 ...
## $ capacidade : int 100 100 70 80 300 150 100 35 50 90 ...
## $ localização : Factor w/ 6 levels "aeroportuário",..: 4 4 3 1 5 3 2 3 2 2 ...
## $ tipo.cardápio: Factor w/ 10 levels "argentino","carnes",..: 7 3 9 1 2 6 4 1 8 5 ...
## $ lucratividade: Factor w/ 7 levels "-15.000,00","-2.000,00",..: 4 5 1 6 7 6 7 4 2 3 ...
Vamos utilizar a função read_delim() do pacote readr para ler arquivos com qualquer tipo de separador.
De início vamos instalar o pacote “redr”
# Instalando o pacote
install.packages("readr")
## Installing package into '/home/jean/R/x86_64-pc-linux-gnu-library/3.4'
## (as 'lib' is unspecified)
# Carregando o pacote
library(readr)
Agora vamos importar um arquivo zipado e atribuir ao objeto chefes.zip (não esquece que para acessar o arquivo ele tem que estar no diretório de trabalho).
chefes.zip <- read_delim("CHEFESmm.zip", delim = ";")
## Parsed with column specification:
## cols(
## salário = col_number(),
## formação = col_character(),
## `carga horária` = col_number(),
## `qtde pratos` = col_double(),
## vinhos = col_character(),
## capacidade = col_double(),
## localização = col_character(),
## `tipo cardápio` = col_character(),
## lucratividade = col_number()
## )
chefes.zip
## # A tibble: 11 x 9
## salário formação `carga horária` `qtde pratos` vinhos capacidade
## <dbl> <chr> <dbl> <dbl> <chr> <dbl>
## 1 7 superior 80 15 não 100
## 2 30 pós-gra… 80 25 sim 100
## 3 7.5 superior 80 10 não 70
## 4 8 médio 60 15 não 80
## 5 8 superior 60 18 não 300
## 6 8 superior 60 23 não 150
## 7 15 pós-gra… 80 20 sim 100
## 8 7 médio 80 13 sim 35
## 9 8.5 superior 68 12 sim 50
## 10 15 superior 60 16 não 90
## 11 3 médio 40 10 não 50
## # … with 3 more variables: localização <chr>, `tipo cardápio` <chr>,
## # lucratividade <dbl>
Para importação de arquivos .txt também pode ser utilizada a função read_lim(). Vamos importar as quatro primeiras linhas do arquivo.
chefes.txt <- read_delim("CHEFESmm.txt", delim = ";", n_max = 4,)
## Parsed with column specification:
## cols(
## salário = col_number(),
## formação = col_character(),
## `carga horária` = col_number(),
## `qtde pratos` = col_double(),
## vinhos = col_character(),
## capacidade = col_double(),
## localização = col_character(),
## `tipo cardápio` = col_character(),
## lucratividade = col_number()
## )
Podemos importar arquivos do Excel (.xlsx) para isso utiizaremos o pacote “readxl”.
# Instalando o pacote
install.packages("readxl")
## Installing package into '/home/jean/R/x86_64-pc-linux-gnu-library/3.4'
## (as 'lib' is unspecified)
## Warning in download.file(url, destfile, method, mode = "wb", ...):
## downloaded length 1178760 != reported length 2056165
## Warning in download.file(url, destfile, method, mode = "wb", ...): URL
## 'https://cloud.r-project.org/src/contrib/readxl_1.3.1.tar.gz': status was
## 'Failure when receiving data from the peer'
## Error in download.file(url, destfile, method, mode = "wb", ...) :
## download from 'https://cloud.r-project.org/src/contrib/readxl_1.3.1.tar.gz' failed
## Warning in download.packages(pkgs, destdir = tmpd, available = available, :
## download of package 'readxl' failed
# Carregando o pacote
library(readxl)
Utilizaremos a função read_xlsx()
chefes.xlsx <- read_xlsx("teste.xlsx")
chefes.xlsx
## # A tibble: 11 x 9
## salário formação `carga horária` `qtde pratos` vinhos capacidade
## <dbl> <chr> <dbl> <dbl> <chr> <dbl>
## 1 7000 superior 8 15 não 100
## 2 30000 pós-gra… 8 25 sim 100
## 3 7500 superior 8 10 não 70
## 4 8000 médio 6 15 não 80
## 5 8000 superior 6 18 não 300
## 6 8000 superior 6 23 não 150
## 7 15000 pós-gra… 8 20 sim 100
## 8 7000 médio 8 13 sim 35
## 9 8500 superior 6.8 12 sim 50
## 10 15000 superior 6 16 não 90
## 11 3000 médio 4 10 não 50
## # … with 3 more variables: localização <chr>, `tipo cardápio` <chr>,
## # lucratividade <dbl>
Para importação de grandes quantidades de dados utilizaremos a função fread() do pacote de “data.table”.
install.packages("data.table")
## Installing package into '/home/jean/R/x86_64-pc-linux-gnu-library/3.4'
## (as 'lib' is unspecified)
## Warning in download.file(url, destfile, method, mode = "wb", ...): URL
## 'https://cloud.r-project.org/src/contrib/data.table_1.12.0.tar.gz': status
## was 'Couldn't resolve host name'
## Error in download.file(url, destfile, method, mode = "wb", ...) :
## não foi possível abrir a URL 'https://cloud.r-project.org/src/contrib/data.table_1.12.0.tar.gz'
## Warning in download.packages(pkgs, destdir = tmpd, available = available, :
## download of package 'data.table' failed
library(data.table)
Utilizaremos a seguinte função:
arq.gr <- fread("arquivogrande.txt")
## Warning in fread("arquivogrande.txt"): Detected 1 column names but the data
## has 4 columns (i.e. invalid file). Added 3 extra default column names at
## the end.
head(arq.gr) # visualizar as seis primeiras linhas
## vers\xe3o=5 COD_MUN, NOME_MUN, DT_INI, DT_FIM V2 V3 V4
## 1: 5300108 Bras\xedlia 1012009 NA
## 2: 1400050 Alto Alegre 1012009 NA
## 3: 1400027 Amajari 1012009 NA
## 4: 1400100 Boa Vista 1012009 NA
## 5: 1400159 Bonfim 1012009 NA
## 6: 1400175 Cant\xe1 1012009 NA
dim(arq.gr) # Dimensões do dataframe
## [1] 5572 4
A função fread irá retornar por padrão um data table, se quisermos que retorne uma dataframe alteramos o argumento data.table para FALSE.
O R consegue exportar dados num formato ASCII (arquivo de texto, delimitado por espaço, vírgula, ponto-e-vírgula, tabulação, …).
A função que iremos utilizar é write.table() ela está contida no pacote base ao qual é instalada junto com a instalação do R.
Vamos começar por exportar nossos dados por tabulação.
write.table(chefes, file = "chefesteste.dat", sep = "\t", row.names = FALSE, quote = FALSE)
# Primeiro argumento é o objeto a ser exportado.
# Segundo argumento é nome do arquivo.
# Terceiro argumento é o tipo de delimitador - \t (tabulação).
# Quarto argumento significa que as linhas desse objeto não tem nome e assim previne o R de colocar números como nome.
# Quinto argumento indica ao R que as variáveis do tipo caracter devem ser exportadas sem estar entre aspas.
Outra forma de exportas dados é no formato CSV
# Forma 01
write.csv(chefes, file = "chefesteste.csv", row.names = F, quote = F)
# Forma 02
write.csv2(chefes, file = "chefesteste2.csv", row.names = F, quote = F)
Se quisermos salvar em outro diretório, faremos da seguinte forma:
# Informe o caminho do diretório que você deseja exportar o arquivo.
write.csv2(chefes, file = "/home/jean/Documentos/Materia_R/Treinamento/Roteiros_das_aulas/Pratica_03/chefesteste2.csv", row.names = F, quote = F)