====== 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("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("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("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("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("exFWF-3.txt", formato = DEC1, skip=2) ===== Dados reais da Regina ===== Lendo arquivo descritor desc <- read.table("dados/11CRDDI.ref.txt", as.is=T) desc desc$V3 desc$V4 <- ifelse(desc$V2 == "A", "character", "integer") desc desc$V4[grep("\\,", desc$V3)] <- "numeric" desc Lendo os dados usando nossa função. Regina <- read.meudado("dados/11CRDDI.txt", formato = desc$V3, as.is=T ) #, skip=2, n=20) Regina ## algumas operacoes uteis: which(grepl("\\,", desc$V3)) which(desc$V4=="integer") which(grepl("CREDITO", desc$V1)) Regina[,which(grepl("CREDITO", desc$V1))] apply(Regina[,which(grepl("CREDITO", desc$V1))], 1, sum) ## colocar aqui os nome dasd variaveis trabalhado/cortado etc #names(Regina) <- desc$V1 Regina$V29 as.Date(as.character(Regina$V29), "%Y%m%d") Regina$V29 <- as.Date(as.character(Regina$V29), "%Y%m%d") Regina <- read.meudado("dados/11CRDDI.txt", formato = desc$V3, as.is=T, skip=2, n=15) Regina Queremos ordenar os dados por data. Antes uma revisão sobre ordenação. x <- rpois(10, lam=10) x sort(x) order(x) x[order(x)] x[rev(order(x))] args(order) order(x, decreasing=T) Agora de volta aos dados Regina <- Regina[order(Regina$V29),] Regina Regina[, c("V7","V8","V9","V29")] aggregate(V7+V8+V9 ~ V29, FUN=sum, data=Regina) ## algumas manipulacoes Regina[,c(7,8,9,29)] aggregate(. ~ V29, data=Regina[,c(7,8,9,29)], FUN=sum) aggregate(V7+V8 ~ V29, data=Regina[,c(7,8,9,29)], FUN=sum) aggregate(cbind(V7,V8) ~ V29, data=Regina[,c(7,8,9,29)], FUN=sum) ===== Um pequeno exemplo de análises automáticas ===== Suponha que voce tem um diretório (pasta) com alguns arquivos que devem ser lidos e processados por análises\\ Vamos supor aqui o diretório ''Regina'' com arquivos com o seguinte conteúdo que supomos ser o mês e a despesa:\\ dir.create("Regina") cat( "12 23,10 \n", "12 20,70 \n", "10 12,10 \n", "10 8,13 \n", file = "Regina/arq1.txt") cat( "09 33,10 \n", "09 50,70 \n", "10 22,10 \n", "10 18,13 \n", file = "Regina/arq2.txt") Para cada um dos arquivos queremos:\\ (i) ler os dados, (ii) calcular a despesa total por mês, (iii) colocar os resultados em uma página ''html''. arquivos <- dir("Regina", full.names=T) arquivos names(arquivos) <- c("MCT", "MEC") arquivos resumo1 <- function(x){ gastos <- read.table(x, dec=",", head=F) names(gastos) <- c("Mes", "Despesa") totM <- aggregate(Despesa ~ Mes, FUN = sum, data=gastos) return(totM) } res <- lapply(arquivos, resumo1) res require(R2HTML) saida <- HTMLInitFile("./",filename="regina", BackGroundColor="#BBBBEE") HTML.title("Exemplo simples de automatizacao de analise", file=saida) HTML("
Use um arquivo CSS para configurar a pagina!!!",file=saida) lapply(res, HTML, file=saida) HTMLEndFile()