[R-br] lendo de csv

Alexandre S. G. Coelho alexandre.coelho em me.com
Quarta Fevereiro 22 23:28:32 BRST 2012


Curiosamente funciona:

reg1 <- read.table(file='CSV/REG0001.csv', header=FALSE, colClasses= c(NA, 'POSIXct', NA, NA, NA, NA, NA, NA), sep=',', quote='\"', dec=',')


Verifiquei com:

sapply(head(reg1), class)

e obtive:

$V1
[1] "integer"

$V2
[1] "POSIXct" "POSIXt" 

$V3
[1] "integer"

$V4
[1] "factor"

$V5
[1] "factor"

$V6
[1] "factor"

$V7
[1] "integer"

$V8
[1] "integer"


Att.

Alexandre



On Feb 22, 2012, at 10:31 PM, Leonard de Assis wrote:

> Eu pensei em usar scan direto, mas eu ia acabar tendo que escrever o
> parser na mão. Achei mais prático e rápido o jeito lento,  lendo tudo
> como string e convertendo a posteriori, nem arrisquei o outro jeito.
> 
> Este era o csv 1 de 202, eu tenho que dar merge neles depois para
> analisar. Ao todo vai ficar pequeno, pois em csv, ocupam 780mb do hd
> 
> em suma:  são 550 mil registros cada um, sendo que no meio do caminho,
> algumas políticas de coleta mudam (vide a data)
> 
> amanhã, com calma, descrevo o problema na lista mundial, eheheh
> 
> []s
> Leonard de Assis
> assis <dot> leonard <at> gmail <dot> com
> 
> 
> Em 22/02/2012 22:16, Benilton Carvalho escreveu:
>> acho q vale um forward da sua pergunta p r-help... vai q tem um jeito
>> q nao estamos enxergando... :)
>> 
>> 2012/2/23 Leonard de Assis <assis.leonard em gmail.com>:
>>> Benilton,
>>> 
>>> em teoria era pra funcionar sem precisar desta "Gambiarra". Acho até
>>> legal consultar o 'Core team' sobre este pequeno inconveniente, acredito
>>> que seja merecedor de uma implementação para suprir este problema (O CSV
>>> foi gerado pelo Oracle e supostamente estava em um padrão ISO)
>>> 
>>> Fazendo em 2 etapas funcionou bem. Levou o dobro do tempo, mas funcionou.
>>> 
>>> []s
>>> Leonard de Assis
>>> assis <dot> leonard <at> gmail <dot> com
>>> 
>>> 
>>> Em 22/02/2012 20:23, Benilton Carvalho escreveu:
>>>> putz... isso eh inconveniente... a avaliacao das classes ta
>>>> acontecendo antes da avaliacao do quote... =/
>>>> 
>>>> faca em dois passos:
>>>> 
>>>> 1) use o read.table() sem colClasses, mas usando stringsAsFactors=FALSE
>>>> 2) converta as colunas relevantes para factor e POSIXct
>>>> 
>>>> b
>>>> 
>>>> 2012/2/22 Leonard de Assis <assis.leonard em gmail.com>:
>>>>> Possuo um csv (+- 350 000 registros) com a seguinte 'xara':
>>>>> 
>>>>> "137831","4/12/2006 17:30:47","0","ENTRE 50 e 100","","","-1","1"
>>>>> "137549","4/12/2006 11:13:26","0","ENTRE 50 e 100","","","-1","1"
>>>>> "137936","4/12/2006 19:58:57","0","ENTRE 50 e 100","","","-1","1"
>>>>> "137661","4/12/2006 13:51:43","0","ENTRE 50 e 100","","","-1","1"
>>>>> "138046","4/12/2006 23:35:00","0","ENTRE 100 e 200","","","-1","1"
>>>>> "140275","8/12/2006 17:15:22","0","ENTRE 50 e 100","","","-1","1"
>>>>> "137837","4/12/2006 17:36:06","0","ENTRE 50 e 100","","","-1","1"
>>>>> "138210","5/12/2006 12:02:20","0","ENTRE 50 e 100","","","-1","1"
>>>>> 
>>>>> depois de alguns milhares de regístros (105296 regístros depois), ele
>>>>> adquire o seguinte formato:
>>>>> 
>>>>> "2144767","6/3/2008","0","ENTRE 1600 e 3200","LJ","SITE","1","1"
>>>>> "2144768","6/3/2008","0","ENTRE 200 e 400","LJ","SITE","1","1"
>>>>> "2144769","6/3/2008","0","ENTRE 100 e 200","LJ","SITE","2","1"
>>>>> "2144770","6/3/2008","0","ENTRE 200 e 400","LJ","SITE","1","1"
>>>>> "2144771","6/3/2008","0","ENTRE 400 e 800","LJ","TVEN","1","1"
>>>>> "2144772","6/3/2008","0","ENTRE 200 e 400","LJ","SITE","1","1"
>>>>> "2144773","6/3/2008","0","ENTRE 100 e 200","LJ","SITE","1","1"
>>>>> "2144774","6/3/2008","0","ENTRE 400 e 800","LJ","SITE","1","1"
>>>>> 
>>>>> mas o problema não chegou a ser essa mudança repentina no formato da data
>>>>> (creio que existirá um sério problema referente a isto ainda), o problema é
>>>>> um pouco antes:
>>>>> 
>>>>> rodei o seguinte código:
>>>>> 
>>>>> reg1 <- read.table(
>>>>>  file="CSV/REG0001.csv",
>>>>>  header=FALSE,
>>>>>  colClasses= c('integer', 'POSIXct', 'integer', 'factor', 'factor',
>>>>> 'factor', 'integer', 'integer'),
>>>>>  sep=',',  quote='\"',   dec=','  )
>>>>> aí, ao executar, sou surpreendido com o seguinte erro:
>>>>> 
>>>>> Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,
>>>>> :
>>>>>  scan() expected 'an integer', got '"155638"'
>>>>> 
>>>>> "155638" é a 1ª linha, 1ª variável do CSV
>>>>> 
>>>>> aí vem a pergunta: Como fazer o R entender que precisa ignorar estas '"' ao
>>>>> ler o csv?
>>>>> 
>>>>> 
>>>>> --
>>>>> []s
>>>>> Leonard de Assis
>>>>> assis <dot> leonard <at> gmail <dot> com
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> R-br mailing list
>>>>> R-br em listas.c3sl.ufpr.br
>>>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código
>>>>> mínimo reproduzível.
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120222/a76b8b4b/attachment.html>


Mais detalhes sobre a lista de discussão R-br