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 Ambos lados da revisão seguinte | |||
cursos:mct:exemplo1b [2011/05/26 00:32] paulojus criada |
cursos:mct:exemplo1b [2011/05/26 22:11] paulojus |
||
---|---|---|---|
Linha 42: | Linha 42: | ||
dados <- ReadExcel("COLOQUE_AQUI_O_NOME_DO_SEU_ARQUIVO") | dados <- ReadExcel("COLOQUE_AQUI_O_NOME_DO_SEU_ARQUIVO") | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | ==== 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("dados/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("dados/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("dados/exFWF.txt", wid=foo2) | ||
+ | </code> | ||
+ | |||
+ | Agora preparando os campos decimais. | ||
+ | <code R> | ||
+ | foo3 <- sapply(foo1, function(x) as.numeric(x[2])) | ||
+ | foo3 | ||
+ | foo3[is.na(foo3)] <- 0 | ||
+ | foo3 | ||
+ | as.data.frame(sweep(data.matrix(foo), 2, 10^foo3, FUN="/")) | ||
+ | </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])) | ||
+ | decimais[is.na(decimais)] <- 0 | ||
+ | arq <- as.data.frame(sweep(data.matrix(arq), 2, 10^decimais, FUN="/")) | ||
+ | return(arq) | ||
+ | } | ||
+ | |||
+ | read.meudado("dados/exFWF.txt", formato = DEC) | ||
+ | </code> | ||
+ | |||
+ | Limitações da função acima (que podem ser generalizadas...) | ||
+ | - assume que todos os campos são numericos | ||
+ | - ao final armazena todos os campos como numeric (double) | ||