Não foi possível enviar o arquivo. Será algum problema com as permissões?
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| 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) | ||
| + | x | ||
| + | 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, (ii) calcular 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> | ||