[R-br] Selecionar bancos específicos de uma pasta

Fernando Souza nandodesouza em gmail.com
Seg Maio 18 23:24:29 -03 2020


Diogo,
Segue minha solução a seu problema. Faça as adaptações necessárias.

Fiz algumas alterações em seu código para tornar a saídas mais legíveis.


dir.create('~/Downloads/bancosex/')
banco1=data.frame(Nome=c("Diogo","Patrícia"),Idade=c(42,40),Salario=c(5000,7000))
write.csv2(banco1,file='~/Downloads/bancosex/banco1.csv',row.names=FALSE)
banco2=data.frame(Nome=c("João","Alexandre"),Idade=c(41,40),Salario=c(8000,9000))
write.csv2(banco2,file='~/Downloads/bancosex/banco2.csv',row.names=FALSE)
banco3=data.frame(Nome=c("Angélica","Nádia"),Idade=c(40,38),Salario=c(9500,7500))
write.csv2(banco3,file='~/Downloads/bancosex/banco3.csv',row.names=FALSE)

## dir= uma string com o path para o diretório
## nameBD= um vetor string com os nomes completos dos arquivos (p.ex
"meuarquivo.csv")

importaBD <-function(dir, nameBD){

    lista<- vector(mode = "list", length =length(nameBD))

    setwd(dir)

    for(i in 1:length(nameBD)){

        lista[[i]]<-list.files(path=dir,pattern=nameBD)

    }

    arquivos<-lapply(lista, function(x) read.csv2(x, header=TRUE, sep=";"))

    dados<-do.call("rbind",arquivos)

    print(dados)

}

importaBD(dir="~/Downloads/bancosex/",nameBD=c("banco1.csv","banco2.csv"))

  Nome Idade Salario
1    Diogo    42    5000
2 Patrícia    40    7000
3    Diogo    42    5000
4 Patrícia    40    7000

att

Em seg., 18 de mai. de 2020 às 19:39, Diogo Jerônimo por (R-br) <
r-br em listas.c3sl.ufpr.br> escreveu:

> Oi Daniel, boa noite.
>
> Esse exemplo eu dei para ilustrar, mas o meu caso é de bases de dados
> trimestrais em *.csv, onde cada base trimestral tem por volta de 100 Megas,
> bases que vem desde 2006 até 2020!!!
>
> Fora o tamanho, essas bases podem ter variáveis adicionais solicitadas
> pelo gestor ao longo dos anos (códigos adicionais, dado de alteração de um
> serviço...), e isso cria conflito se eu juntar as bases com número de
> colunas diferentes pelo "rbind".
>
> No meu caso, um período em que tenho dados uniformes (sem alteração do
> número de colunas) é entre 2017 e 2018, e nesse caso, não posso apagar e
> nem copiar as outras bases (por motivos de segurança). Assim, eu teria de
> escolher somente as bases dos trimestres dos anos que me interessam (2017
> trim1,...,2018 trim4) para processar a análise estatística de interesse.
>
> Não sei se consegui ser claro, mas é isso.
>
> Obrigado!!!
>
> *Diogo Jerônimo*
> *Bacharel em Ciências Estatísticas - ENCE/IBGE*
> *Mestre em Metrologia - PUC-Rio/PósMQI*
> *CONRE: 8514 - SÉRIE A*
>
> Em segunda-feira, 18 de maio de 2020 18:14:38 BRT, Daniel Guimarães Tiezzi
> por (R-br) <r-br em listas.c3sl.ufpr.br> escreveu:
>
>
> Se VC sabe qual os arquivos VC precisa let, certo? Deixe somente eles no
> seu objeto listas.
>
> Daniel
>
> On Mon, 18 May 2020, 18:11 Mauro Sznelwar por (R-br), <
> r-br em listas.c3sl.ufpr.br> wrote:
>
> Tem o data set para rodar?
>
>
>
>
> Lista, bom dia e boa semana!!! Criei o "reproduzível" para explicar a
> dúvida. Nesse exemplo, de uma pasta, identifiquei arquivos "*.csv", e
> depois apliquei o *lapply* e o *do.call* para importar e juntar esses
> bancos:
>
> dir.create('c:/users/diogo/desktop/bancosex/')
> banco1=data.frame(cbind(c("Diogo","Patrícia"),c(42,40),c(5000,7000)))
>
> write.csv2(banco1,file='c:/users/diogo/desktop/bancosex/banco1.csv',row.names=FALSE)
> banco2=data.frame(cbind(c("João","Alexandre"),c(41,40),c(8000,9000)))
>
> write.csv2(banco2,file='c:/users/diogo/desktop/bancosex/banco2.csv',row.names=FALSE)
> banco3=data.frame(cbind(c("Angélica","Nádia"),c(40,38),c(9500,7500)))
>
> write.csv2(banco3,file='c:/users/diogo/desktop/bancosex/banco3.csv',row.names=FALSE)
>
> setwd('c:/users/diogo/desktop/bancosex/')
> lista<-list.files()
> arquivos<-lapply(lista, function(x) read.csv2(x, header=TRUE, sep=";"))
> dados<-do.call("rbind", arquivos)
>
> Meu problema: esse código vai "pegar" TODOS os bancos da pasta antes de
> importar e juntar. Eu gostaria de pegar somente PARTE desses bancos (ex:
> apenas banco1 e banco2, apenas banco2 e banco3...).
>
> Alguém saberia como fazer isso?
>
> Obrigado!!!
>
> *Diogo Jerônimo*
> *Bacharel em Ciências Estatísticas - ENCE/IBGE*
> *Mestre em Metrologia - PUC-Rio/PósMQI*
> *CONRE: 8514 - SÉRIE A*
> _______________________________________________
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
>
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
>
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>


-- 

Lattes: http://lattes.cnpq.br/6519538815038307
Blog: https://producaoanimalcomr.wordpress.com/
==========================================
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20200518/83e2957b/attachment.html>


Mais detalhes sobre a lista de discussão R-br