Essa é uma revisão anterior do documento!
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…)
- assume que todos os campos são numericos
- ao final armazena todos os campos como numeric (double)