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

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>​
  

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