Jesús Para Fernández
2017-Jan-09 08:42 UTC
[R-es] Leer csv separado por comas y por espacios
Buenas compañeros!
Tengo una duda y no se muy bine como resolverlo. Tengo un csv en el que hay
variables separadas por comas y otras esparadas por espacios (tabulaciones).
Algo así
V1 V2 V3,V4
M1 123 2512,2522
M2 117 2852,3521
...................................
Para leerlo he probado poniendo:
datos<-read.csv("c:/datos/listado.txt",sep=c(",","","\t"),header=F)
Pero no me funciona, es decir, la separada por el espacio en blanco no la
distingue y la mete en lo mismo.
Lo he solucionado hacinedo un strsplit pero es un poco coñazo andar parcheando
algo que tendria que leer bien directametne.
¿Alguna idea de porque no está cogiendo bien el fichero?
Gracias
Jesús
[[alternative HTML version deleted]]
Hola, El parámetro "sep" de "read.csv()" ha de ser único. No puedes utilizar varias opciones, aunque es cierto que en la documentación no lo advierte. Por lo que tienes que utilizar otra estrategia para leer el fichero. Te sugeriría varias cosas: - Probar con la función "fread()" del paquete "data.table" que es algo más inteligente que read.csv. Aunque no tengo claro que realmente te vaya a funcionar... pero por probar... - Una segunda opción es un poco más trabajosa que es el leer el fichero con "readLines", de esta forma te generará un data.frame con una fila por línea del fichero. Luego tendrás que construir una lógica para que si la línea tiene "," como separador separes las variables y si el separador es un "tab" que haga lo propio. - Otra opción más limpia y sencilla es pre-procesar el fichero en el SO con funciones del tipo "sed", "awk" y dejarlo con el formato, separadores que más te interese. - Y si el fichero tiene bloques con "," y otros bloques con "tab" como separador, puedes utilizar "read.table" y decir que vaya saltando el número de filas, que no tienen el separador que has definido... Saludos, Carlos Ortega www.qualityexcellence.es El 9 de enero de 2017, 9:42, Jesús Para Fernández < j.para.fernandez en hotmail.com> escribió:> Buenas compañeros! > > > Tengo una duda y no se muy bine como resolverlo. Tengo un csv en el que > hay variables separadas por comas y otras esparadas por espacios > (tabulaciones). Algo así > > > V1 V2 V3,V4 > > M1 123 2512,2522 > > M2 117 2852,3521 > > ................................... > > > > Para leerlo he probado poniendo: > > > datos<-read.csv("c:/datos/listado.txt",sep=c(",","","\t"),header=F) > > > Pero no me funciona, es decir, la separada por el espacio en blanco no la > distingue y la mete en lo mismo. > > > Lo he solucionado hacinedo un strsplit pero es un poco coñazo andar > parcheando algo que tendria que leer bien directametne. > > > ¿Alguna idea de porque no está cogiendo bien el fichero? > > > Gracias > > Jesús > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Jesús Para Fernández
2017-Jan-09 13:06 UTC
[R-es] Leer csv separado por comas y por espacios
Pensé que sería mucho más sencillo.
Al final optaré por lo que he hecho, el strstrip
Gracias de todos modos
Jesús
________________________________
De: Carlos Ortega <cof en qualityexcellence.es>
Enviado: lunes, 9 de enero de 2017 12:49
Para: Jesús Para Fernández
Cc: r-help-es en r-project.org
Asunto: Re: [R-es] Leer csv separado por comas y por espacios
Hola,
El parámetro "sep" de "read.csv()" ha de ser único. No
puedes utilizar varias opciones, aunque es cierto que en la documentación no lo
advierte. Por lo que tienes que utilizar otra estrategia para leer el fichero.
Te sugeriría varias cosas:
* Probar con la función "fread()" del paquete
"data.table" que es algo más inteligente que read.csv. Aunque no tengo
claro que realmente te vaya a funcionar... pero por probar...
* Una segunda opción es un poco más trabajosa que es el leer el fichero con
"readLines", de esta forma te generará un data.frame con una fila por
línea del fichero. Luego tendrás que construir una lógica para que si la línea
tiene "," como separador separes las variables y si el separador es un
"tab" que haga lo propio.
* Otra opción más limpia y sencilla es pre-procesar el fichero en el SO con
funciones del tipo "sed", "awk" y dejarlo con el formato,
separadores que más te interese.
* Y si el fichero tiene bloques con "," y otros bloques con
"tab" como separador, puedes utilizar "read.table" y decir
que vaya saltando el número de filas, que no tienen el separador que has
definido...
Saludos,
Carlos Ortega
www.qualityexcellence.es<http://www.qualityexcellence.es>
[http://qualityexcellence.es/images/1_blanco.jpg]<http://www.qualityexcellence.es/>
QualityExcellence<http://www.qualityexcellence.es/>
www.qualityexcellence.es
QUALITY EXCELLENCE, consultores en calidad, procesos y mejora continua
El 9 de enero de 2017, 9:42, Jesús Para Fernández <j.para.fernandez en
hotmail.com<mailto:j.para.fernandez en hotmail.com>> escribió:
Buenas compañeros!
Tengo una duda y no se muy bine como resolverlo. Tengo un csv en el que hay
variables separadas por comas y otras esparadas por espacios (tabulaciones).
Algo así
V1 V2 V3,V4
M1 123 2512,2522
M2 117 2852,3521
...................................
Para leerlo he probado poniendo:
datos<-read.csv("c:/datos/listado.txt",sep=c(",","","\t"),header=F)
Pero no me funciona, es decir, la separada por el espacio en blanco no la
distingue y la mete en lo mismo.
Lo he solucionado hacinedo un strsplit pero es un poco coñazo andar parcheando
algo que tendria que leer bien directametne.
¿Alguna idea de porque no está cogiendo bien el fichero?
Gracias
Jesús
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org<mailto:R-help-es en r-project.org>
https://stat.ethz.ch/mailman/listinfo/r-help-es
--
Saludos,
Carlos Ortega
www.qualityexcellence.es<http://www.qualityexcellence.es>
[[alternative HTML version deleted]]
Y si lees el archivo por lineas con readLines() y luego usas "buscar y reemplazar" y cambias "comas" por \tab, grabas, cierras, y vuelves a leer todo con fread o read.csv? Slds, eric. On 01/09/2017 05:42 AM, Jesús Para Fernández wrote:> Buenas compa?eros! > > > Tengo una duda y no se muy bine como resolverlo. Tengo un csv en el que hay variables separadas por comas y otras esparadas por espacios (tabulaciones). Algo as? > > > V1 V2 V3,V4 > > M1 123 2512,2522 > > M2 117 2852,3521 > > ................................... > > > > Para leerlo he probado poniendo: > > > datos<-read.csv("c:/datos/listado.txt",sep=c(",","","\t"),header=F) > > > Pero no me funciona, es decir, la separada por el espacio en blanco no la distingue y la mete en lo mismo. > > > Lo he solucionado hacinedo un strsplit pero es un poco co?azo andar parcheando algo que tendria que leer bien directametne. > > > ?Alguna idea de porque no est? cogiendo bien el fichero? > > > Gracias > > Jes?s > > [[alternative HTML version deleted]] > > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Forest Engineer Master in Environmental and Natural Resource Economics Ph.D. student in Sciences of Natural Resources at La Frontera University Member in AguaDeTemu2030, citizen movement for Temuco with green city standards for living Nota: Las tildes se han omitido para asegurar compatibilidad con algunos lectores de correo.