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.
Próxima revisão | Revisão anterior Próxima revisão Ambos lados da revisão seguinte | ||
cursos:mct:exemplo1b [2011/05/26 00:32] paulojus criada |
cursos:mct:exemplo1b [2011/05/27 00:31] paulojus revisão anterior restaurada |
||
---|---|---|---|
Linha 44: | Linha 44: | ||
+ | ==== 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. | ||
+ | <code> | ||
+ | 1200512345627 | ||
+ | 1100227372912 | ||
+ | 1000312034115 | ||
+ | 0900414732112 | ||
+ | </code> | ||
+ | Lendo as dados com colunas de tamanho definido | ||
+ | <code R> | ||
+ | foo <- read.fwf("exFWF.txt", wid=c(2,3,6,2)) | ||
+ | foo | ||
+ | </code> | ||
+ | É possível excluir um conjunto de caracteres (uma ou mais variáveis), usando índices negativos.\\ | ||
+ | Isto permite selecionar somente o que se quer ler. | ||
+ | <code R> | ||
+ | read.fwf("exFWF.txt", wid=c(2,-3,6,2)) | ||
+ | </code> | ||
+ | |||
+ | 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: | ||
+ | <code R> | ||
+ | DEC <- c("2", "3", "4,2", "1,1") | ||
+ | </code> | ||
+ | |||
+ | Vamos ilustrar o uso da linguagem com alguns elementos usados para ler e preparar os dados. | ||
+ | <code R> | ||
+ | ## 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) | ||
+ | </code> | ||
+ | |||
+ | Agora preparando os campos decimais. | ||
+ | <code R> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | Limpeza... | ||
+ | <code R> | ||
+ | rm(foo, DEC, foo1, foo2, foo3) | ||
+ | </code> | ||
+ | |||
+ | Agora vamos montar uma função que concatena os comandos acima para facilitar a leitura de arquivos deste tipo sempre que preciso. | ||
+ | <code R> | ||
+ | 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) | ||
+ | </code> | ||
+ | |||
+ | Outro exemplo, os dados abaixo no arquivo ''exFWF-2.txt'', com campos alfanuméricos no arquivo. | ||
+ | <code> | ||
+ | 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> | ||