Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
cursos:mct:exemplo1b [2011/05/26 22:11] paulojuscursos:mct:exemplo1b [2011/05/27 19:18] (atual) paulojus
Linha 58: Linha 58:
 Lendo as dados com colunas de tamanho definido Lendo as dados com colunas de tamanho definido
 <code R> <code R>
-foo <- read.fwf("dados/exFWF.txt", wid=c(2,3,6,2))+foo <- read.fwf("exFWF.txt", wid=c(2,3,6,2))
 foo foo
 </code> </code>
Linha 65: Linha 65:
 Isto permite selecionar somente o que se quer ler. Isto permite selecionar somente o que se quer ler.
 <code R> <code R>
-read.fwf("dados/exFWF.txt", wid=c(2,-3,6,2))+read.fwf("exFWF.txt", wid=c(2,-3,6,2))
 </code> </code>
  
Linha 81: Linha 81:
 foo2 <- sapply(foo1, function(x) sum(as.numeric(x))) foo2 <- sapply(foo1, function(x) sum(as.numeric(x)))
 foo2 foo2
-read.fwf("dados/exFWF.txt", wid=foo2)+read.fwf("exFWF.txt", wid=foo2)
 </code> </code>
  
Linha 88: Linha 88:
 foo3 <- sapply(foo1, function(x) as.numeric(x[2])) foo3 <- sapply(foo1, function(x) as.numeric(x[2]))
 foo3 foo3
-foo3[is.na(foo3)] <- 0 +COLS <- !is.na(foo3) 
-foo3 +COLS 
-as.data.frame(sweep(data.matrix(foo), 2, 10^foo3, FUN="/"))+ 
 +sweep(data.matrix(foo[,COLS]), 2, 10^foo3[COLS], FUN="/"
 +foo[,COLS] <- sweep(data.matrix(foo[,COLS]), 2, 10^foo3[COLS], FUN="/") 
 +foo
 </code>  </code> 
  
Linha 100: Linha 103:
 Agora vamos montar uma função que concatena os comandos acima para facilitar a leitura de arquivos deste tipo sempre que preciso. Agora vamos montar uma função que concatena os comandos acima para facilitar a leitura de arquivos deste tipo sempre que preciso.
 <code R> <code R>
-read.meudado <- function(file, formato){+read.meudado <- function(file, formato, ...){
        lformato <- strsplit(formato, split=",")        lformato <- strsplit(formato, split=",")
        ncampos <- sapply(lformato, function(x) sum(as.numeric(x)))        ncampos <- sapply(lformato, function(x) sum(as.numeric(x)))
-       arq <- read.fwf(file, width=ncampos)+       arq <- read.fwf(file, width=ncampos, ...)
        decimais <- sapply(lformato, function(x) as.numeric(x[2]))        decimais <- sapply(lformato, function(x) as.numeric(x[2]))
-    decimais[is.na(decimais)] <- 0 +    COLS <- !is.na(decimais)  
-       arq <- as.data.frame(sweep(data.matrix(arq), 2, 10^decimais, FUN="/"))+       arq[,COLS] <- sweep(data.matrix(arq[,COLS, drop=F]), 2, 10^decimais[COLS], FUN="/")
     return(arq)     return(arq)
-    }+}
  
-read.meudado("dados/exFWF.txt", formato = DEC)+read.meudado("exFWF.txt", formato = DEC)
 </code> </code>
  
-Limitações da função acima (que podem ser generalizadas...) +Outro exemplo, os dados abaixo no arquivo ''exFWF-2.txt'', com campos alfanuméricos no arquivo. 
-  assume que todos os campos são numericos +<code> 
-  - ao final armazena todos os campos como numeric (double)+ 12005AA12345627 
 + 11002BB27372912 
 + 10003BB12034115 
 + 09004CC14732112 
 +</code>  
 + 
 +<code R> 
 +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) 
 +</code> 
 + 
 +Outro exemplo, os dados abaixo no arquivo ''exFWF-3.txt'', com campos alfanuméricos no arquivo e linhas a serem ignoradas. 
 +<code> 
 + Dados no formato FWF 
 + Exemplo do curso 
 + 12005AA12345627 
 + 11002BB27372912 
 + 10003BB12034115 
 + 09004CC14732112 
 +</code> 
 + 
 +Lendo com a função, note o uso do mecanismo de '' . . . '' para passar argumentos para ''read.fwf()'' 
 + 
 +<code R> 
 +read.meudado("exFWF-3.txt", formato = DEC1, skip=2) 
 +</code> 
 + 
 +===== Dados reais da Regina ===== 
 +Lendo arquivo descritor 
 +<code R> 
 +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 
 +</code> 
 + 
 +Lendo os dados usando nossa função
 +<code R> 
 +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 
 +</code> 
 + 
 +Queremos ordenar os dados por data. Antes uma revisão sobre ordenação. 
 +<code R> 
 +x <- rpois(10, lam=10) 
 +
 +sort(x) 
 +order(x) 
 +x[order(x)] 
 +x[rev(order(x))] 
 +args(order) 
 +order(x, decreasing=T) 
 +</code> 
 + 
 +Agora de volta aos  dados 
 +<code R> 
 +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) 
 +</code> 
 + 
 + 
 +===== 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:\\ 
 +<code> 
 +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"
 +</code> 
 + 
 +Para cada um dos arquivos queremos:\\  
 +(i) ler os dados, (iicalcular a  despesa total por mês, (iii) colocar os resultados em uma página ''html''
 + 
 +<code R> 
 +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("<br>Use um arquivo CSS para configurar a pagina!!!",file=saida) 
 +lapply(res, HTML, file=saida) 
 +HTMLEndFile() 
 +</code>
  
  

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