Não foi possível enviar o arquivo. Será algum problema com as permissões?

Essa é uma revisão anterior do documento!


Entrada de dados por aquivos

Entrada de dados por aquivos

O R importa dados de arquivos de diferentes formatos.

O mais comum e possivelmente mais geral é a importação de arquivos em formato texto, tipicamente com extensões txt, csv usando as funções read.table(), read.csv() e read.csv2().

Muitos outros formatos são possíveis, incluindo os de outros programas estatísticos. Há funções específicas para cada um deles.

Importação de planilhas

É comum encontrar dados no formatos de planilhas do MS-Excel. Há várias alternativas para ler estas planilhas e listamos algumas a seguir.

  • 1) Exportar os dados no excel para o formato texto (txt ou csv) e importar no R conforme mencionado anteriormente
  • 2) Usar funções de pacotes especialistas do R para importar/exportar/manipilar arquivos excel. Alguns deles:
    • xlsReadWrite (apenas no Windows)
    • xlsx
    • gdata
    • XLConnect
    • RExcelInstaller (apenas no Windows)
  • 3) Driver genéricos
    • RODBC

Exemplo fornecido pelo Roberto

## preparando a internet para uso no MCT
setInternet2()
 
## instalando pacote
install.packages("XLConnect", dep=T) 
 
## definindo uma função para facilitar importação
ReadExcel <- function (FileName) {
  require(XLConnect)
  wb <- loadWorkbook(FileName)
  data <- readWorksheet(wb, sheet = 1)
  return(data)
} 
 
## lendo
dados <- ReadExcel("COLOQUE_AQUI_O_NOME_DO_SEU_ARQUIVO")

Dados de largura fixa

Considere que temos um arquivo de dados exFWF.txt com o seguinte conteúdo. Considere ainda que estes dados se reverem a 4 variáveis, sendo que os 2 primeiros campos da primeira, depois 3 da segunda, 6 de terceira e 2 da quarta.

  1200512345627
  1100227372912
  1000312034115
  0900414732112

Lendo as dados com colunas de tamanho definido

foo <- read.fwf("dados/exFWF.txt", wid=c(2,3,6,2))
foo

É possível excluir um conjunto de caracteres (uma ou mais variáveis), usando índices negativos.
Isto permite selecionar somente o que se quer ler.

read.fwf("dados/exFWF.txt", wid=c(2,-3,6,2))

Agora vamos supor que temos uma variável (como caracter) com a especificação da composição das colunas.
Supondo que a terceira variável tem duas casas decimal e a quarta tem uma e a variável seria da forma:

DEC <- c("2", "3", "4,2", "1,1")

Vamos ilustrar o uso da linguagem com alguns elementos usados para ler e preparar os dados.

## achando o total de caracteres de cada campo
foo1 <- strsplit(DEC, split=",")
foo1
foo2 <- sapply(foo1, function(x) sum(as.numeric(x)))
foo2
read.fwf("dados/exFWF.txt", wid=foo2)

Agora preparando os campos decimais.

foo3 <- sapply(foo1, function(x) as.numeric(x[2]))
foo3
COLS <- !is.na(foo3)
COLS
 
sweep(data.matrix(foo[,COLS]), 2, 10^foo3[COLS], FUN="/")
foo[,COLS] <- sweep(data.matrix(foo[,COLS]), 2, 10^foo3[COLS], FUN="/")
foo

Limpeza…

rm(foo, DEC, foo1, foo2, foo3)

Agora vamos montar uma função que concatena os comandos acima para facilitar a leitura de arquivos deste tipo sempre que preciso.

read.meudado <- function(file, formato, ...){
       lformato <- strsplit(formato, split=",")
       ncampos <- sapply(lformato, function(x) sum(as.numeric(x)))
       arq <- read.fwf(file, width=ncampos, ...)
       decimais <- sapply(lformato, function(x) as.numeric(x[2]))
	   COLS <- !is.na(decimais) 
       arq[,COLS] <- sweep(data.matrix(arq[,COLS, drop=F]), 2, 10^decimais[COLS], FUN="/")
	   return(arq)
}
 
read.meudado("dados/exFWF.txt", formato = DEC)

Outro exemplo, os dados abaixo no arquivo exFWF-2.txt, com campos alfanuméricos no arquivo.

 12005AA12345627
 11002BB27372912
 10003BB12034115
 09004CC14732112

read.fwf("exFWF-2.txt", wid=c(2,3,2,6,2))
 
DEC1 <- c("2", "3", "2", "4,2", "1,1")
read.meudado("exFWF-2.txt", formato = DEC1)

Outro exemplo, os dados abaixo no arquivo exFWF-3.txt, com campos alfanuméricos no arquivo e linhas a serem ignoradas.

 Dados no formato FWF
 Exemplo do curso
 12005AA12345627
 11002BB27372912
 10003BB12034115
 09004CC14732112

Lendo com a função, note o uso do mecanismo de para passar argumentos para read.fwf()

read.meudado("dados/exFWF-3.txt", formato = DEC1, skip=2)


QR Code
QR Code cursos:mct:exemplo1b (generated for current page)