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

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 anterior Revisão anterior
Próxima revisão
Revisão anterior
cursos:mct:exemplo1b [2011/05/26 22:11]
paulojus
cursos: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)