exemplos_de_aula/10-manipulacao-arquivos.R

# Caminhos até arquivos --------------------------------------------------

# Uma habilidade importante quando estamos analisando dados é 
# conseguir escrever os caminhos corretos até os arquivos, como por exemplo as 
# nossas bases de dados.

# Por exemplo: caso a gente não consiga informar para o R o caminho
# da planilha que queremos ler, não conseguiremos abrir estes dados 
# no R para fazer as análises.

# O primeiro conceito importante neste momento é o de diretórios de trabalho.
# O diretório de trabalho, ou working directory, é a pasta no computador 
# onde o R está considerando como nosso "local de trabalho" atual.

# Quando trabalhamos com projetos no R (R projects), o diretório de trabalho
# é a pasta onde o arquivo .Rproj atual está salvo. Essa é uma grande vantagem
# de trabalhar com projetos!

# E quando não estamos em projetos? É possível ver (e mudar!) qual é o diretório
# de trabalho utilizado por padrão pelo RStudio no seu computador através
# do caminho:
# "Tools"(na barra de navegação superior) > "Global Options" > "General" >
# "Default working directory (when not in a project):" 

# Como saber qual o nosso diretório de trabalho atual?
getwd()
# setwd() # existe, mas nao use!

# Existem duas formas de informar para o R os caminhos até um arquivo ou pasta
# no computador: caminhos absolutos e relativos.

# Caminhos absolutos: são completos, partindo da "raíz" do computador.
"/home/william/Documents/Curso-R/main-r4ds-1/dados/imdb.csv"

# Caminhos relativos: são relativos ao  diretório de trabalho atual, 
# partem dele.
"dados/imdb.csv"
"dados/voos_de_janeiro.csv"

# (cara(o) professora(o), favor lembrar de falar da dica 
# de navegação entre as aspas e a tecla tab) 



# Lidando com arquivos


# A função list.files permite saber quais arquivos estão no diretório de trabalho,
# ou também em outros diretórios, e saber utilizar ela será muito útil!

list.files() # Lista os arquivos no diretório atual de trabalho (working directory)

list.files("dados/") # Usando caminho relativo, lista arquivos que estão na 
# pasta 'dados/' no projeto atual


list.files("/Users/") # Usando caminho absoluto, consigo navegar fora do meu 
# projeto e listar os arquivos presentes em outros locais do meu computador


# Essa função possui argumentos muito interessantes! por exemplo:

# o argumento pattern define qual extensão deseja pesquisar,
# ou padroes nos textos

list.files(pattern = "dados")

list.files(pattern = ".csv")

list.files("dados/", pattern = ".csv")

# o argumento recursive, caso seja verdadeiro, também procurará arquivos nas pastas 
# que fazem parte da pasta que você está verificando
list.files(recursive = TRUE)

list.files(recursive = TRUE)

# o argumento full.names, caso seja verdadeiro, mantém o caminho relativo 
# completo até o arquivo.
arquivos_dados <- list.files(path = "dados", full.names = TRUE)

readr::read_csv2(arquivos_dados[1]) 


list.files(full.names = TRUE)


# Podemos combinar estes argumentos também! No exemplo abaixo, queremos os arquivos
# na pasta dados, que tenham extensão '.csv', e queremos manter o caminho completo
# até esse arquivo.

arquivos <- list.files("dados", pattern = ".csv", full.names = TRUE) 

library(purrr)
library(readr)
library(dplyr)
voos_2013 <- map_dfr(arquivos, read_csv2)

voos_2013 |> count(mes) # podemos ver que temos todos os meses na base!

# Com esse vetor, com uso de outras funções, será possível abrir diversas tabelas
# (com a mesma estrutura) em uma única base no R com poucas linhas de código.



# Pacote fs ----------------

# O pacote fs tem como foco lidar com arquivos! A seguir mostraremos alguns 
# exemplos de uso onde este pacote foi útil.

 
# install.packages("fs") # instale caso seja necessário!
library(fs) # carregue o pacote para usar

# Exemplo 1: Quero criar uma pasta no meu projeto diretamente do R!
# obs: caso a pasta já exista, nada acontecerá.

fs::dir_create("exemplo_dir_create")

fs::dir_create("dados/exemplos")


# Exemplo 2: Quero criar um arquivo diretamente do R!
# obs: caso a arquivo já exista, nada acontecerá.

fs::file_create("exemplo_file_create.R")

# Exemplo 3: Ver a estrutura do projeto no console: quais arquivos estão presentes?
# como estão organizados nas pastas?

fs::dir_tree()

# Exemplo 4: É possível copiar todos os arquivos de uma pasta para outra usando
# a função dir_copy(). O primeiro argumento é o caminho para  pasta a ser copiada,
# e o segundo argumento é o caminho para a nova pasta 
# (caso ela não exista, ela será criada).

fs::dir_copy("dados", "dados2")

# Exemplo 5: arruma os nomes dos arquivos de uma pasta

# Primeiro vamos criar uma pasta para fazer isso
fs::dir_create("pasta_com_arquivos_baguncados")

# Vamos criar dois arquivos como exemplo, com nomes escritos em caixa alta
fs::file_create("pasta_com_arquivos_baguncados/UM_ARQUIVO_COM_CAPS_LOCK.R")

fs::file_create("pasta_com_arquivos_baguncados/OUTRO_ARQUIVO_COM_CAPS_LOCK.R")

# Agora vamos criar vetores: com os nomes originais, e com os novos nomes
nomes_originais <- list.files("pasta_com_arquivos_baguncados", full.names = TRUE) 

novos_nomes <- tolower(nomes_originais)  
# a função tolower() é usada para transformar letras maiúsculas em minúsculas

# usaremos a função file_move() para mover os arquivos com os caminhos originais, 
# para os caminhos com nomes corrigidos. 
fs::file_move(nomes_originais, novos_nomes)

# Exemplo 5: podemos também deletar os arquivos diretamente do R, usando a função
# file_delete()

fs::file_delete("pasta_com_arquivos_baguncados")


fs::file_delete("exemplo_dir_create/")
fs::file_delete("exemplo_file_create.R")
fs::file_delete("basedadosexecucao2022.xlsx")

# exemplo da duvida
library(stringr)
arquivos <- list.files(recursive = TRUE, full.names = TRUE)
arquivos
arquivos_para_excluir <- arquivos[!str_detect(arquivos, pattern = ".R$")]


list.files(path = "~/Downloads", recursive = TRUE, full.names = TRUE)


arquivo <- "/Users/beatrizmilz/Downloads/lattes.pdf"

file_move(arquivo, "lattes.pdf") # pacote fs
curso-r/202202-intro-programacao documentation built on April 6, 2022, 10:13 p.m.