Lendo e armazenando uma série de arquivos

Introdução

Com frequência há necessidade de acessarmos uma série arquivos para gerar um banco de dados. Quando se tem dois ou três arquivos, pode-se dizer que escrever algumas linhas não demora. Contudo, quando se tem mais de três arquivos, seja ele .csv, .dat, etc., gasta-se tempo que poderia ser investido em outra ação. Na linguagem R, uma das opções de se realizar esta operação é a utilização de listas.

Estudo de caso I

Vamos supor que você tenha uma série de arquivos no formato .csv

### Criando um data.frame hipotético
DF <-
    data.frame(BLOCO = rep(seq(1,4), each = 12),
               TRAT=rep(c("T1", "T2", "T3"), each = 4),
               REP = seq(1,4),
               Z = rnorm(48, 30, 2.6))
head(DF)
>
##   BLOCO TRAT REP        Z
## 1     1   T1   1 30.50221
## 2     1   T1   2 30.11910
## 3     1   T1   3 27.47513
## 4     1   T1   4 30.58861
## 5     1   T2   1 30.31546
## 6     1   T2   2 28.90498
### Gerando uma série de arquivos csv
sapply(c("foo1.csv", "foo2.csv", "foo3.csv", "foo4.csv", "foo5.csv"),
       function(i){
       write.csv(DF, paste(i))})
>
## $foo1.csv
## NULL
## 
## $foo2.csv
## NULL
## 
## $foo3.csv
## NULL
## 
## $foo4.csv
## NULL
## 
## $foo5.csv
## NULL
### Verifique se os arquivos .csv foram criados
dir()
>
## [1] "170514_READING_FILES.md"  "170514_READING_FILES.Rmd"
## [3] "foo1.csv"                 "foo2.csv"                
## [5] "foo3.csv"                 "foo4.csv"                
## [7] "foo5.csv"
### Lendo os nomes dos arquivos .csv
temp = list.files(pattern="*.csv")
temp
>
## [1] "foo1.csv" "foo2.csv" "foo3.csv" "foo4.csv" "foo5.csv"
### Gerando uma lista com os arquivos .csv

DF_LIST <-
    lapply(seq(1, length(temp)),
           function(z)
               read.csv(temp[z],
                        header = TRUE,
                        dec = ".",
                        sep = ","))

### Agrupando em um único data.frame
DF_LIST_agrup <-
    do.call(rbind.data.frame, DF_LIST)

head(DF_LIST_agrup)
>
##   X BLOCO TRAT REP        Z
## 1 1     1   T1   1 30.50221
## 2 2     1   T1   2 30.11910
## 3 3     1   T1   3 27.47513
## 4 4     1   T1   4 30.58861
## 5 5     1   T2   1 30.31546
## 6 6     1   T2   2 28.90498
dim(DF_LIST_agrup)
>
## [1] 240   5

Estudo de caso II

Quando se tem arquivos .xls ou .xlsx pode-se utilizar o pacote readxl.

#library(readxl)

DF1 <- 
read_excel("NOME_DO_ARQUIVO.xlsx")

Caso seja necessário ler uma pasta específica do seu arquivo .xls ou xlxs basta usar as opções da função.

#library(readxl)

DF2 <-
    read_excel("NOME_DO_ARQUIVO.xlsx",
               sheet = "NOME_DA_PASTA")

Estudo de caso III

Se seu arquivo .xls ou xlxs tiver uma série de pastas, basta usar a mesma lógica do Estudo de caso I.

#library(readxl)

LISTA_PASTAS <- c("PASTA1",
                  "PASTA2",
                  "PASTA3")

### Lendo as pastas do arquivo  "NOME_DO_ARQUIVO.xlsx"

DF3_LISTA <-
    sapply(LISTA_PASTAS,
           function(L){
               read_excel("NOME_DO_ARQUIVO.xlsx",
                          sheet = L)
               },
           simplify = FALSE)

### DB ACCOUNT
DF3_DF <- do.call(rbind.data.frame, DF3_LISTA)

Para maiores detalhes sobre ler os dados de arquivos .xls ou .xlsx consulte as referências.

[]

“Without data, you’re just another person with an opinion.”

  • W. Edwards Deming*

Referências

Convert a list of data frames into one data frame Concatenating a list of data frames readxl

 Share!

 
comments powered by Disqus