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
foo3[is.na(foo3)] <- 0
foo3
as.data.frame(sweep(data.matrix(foo), 2, 10^foo3, FUN="/"))

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]))
	   decimais[is.na(decimais)] <- 0
       arq <- as.data.frame(sweep(data.matrix(arq), 2, 10^decimais, FUN="/"))
	   return(arq)
	   }
 
read.meudado("dados/exFWF.txt", formato = DEC)

Limitações da função acima (que podem ser generalizadas…)

  1. assume que todos os campos são numericos
  2. ao final armazena todos os campos como numeric (double)

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