Estimado Carlos, muchas gracias por tus dos sugerencias. Algo asi es lo que estaba buscando para no tener que salir de R. Ademas genial que fread produzca un data.table pues el codigo esta hecho usando esa libreria.
Eric.
Post by Carlos OrtegaHola,
Además de la solución de modificar el fichero antes de procesarlo en R
usando comando Unix/Linux del sistema, puedes probar a hacerlo todo en
"R" con otras funciones de lectura de otros paquetes.
En un fichero "Myfile.txt" tengo las siguientes líneas con algunas
#---------------
DeployID Date.Time LocationQuality Latitude Longitude
STM05-1 2005/02/28 17:35 Good -35.562 177.158
STM05-1 2005/02/28 19:44 Good -35.487 177.129
STM05-1 2005/02/28 23:01 Unknown -35.399 177.064
STM05-1 2005/03/01 07:28 Unknown -34.978 177.268
STM05-1 2005/03/01 18:06 Poor -34.799 177.027
STM05-1 2005/03/01 18:47 Poor -34.85 177.059
STM05-2 2005/02/28 12:49 Good -35.928 177.328
STM05-2 2005/02/28 21:23 Poor -35.926 177.314
#---------------
* En la segunda línea entre SMT05-1 y 2005... hay varios espacios y
varios tabuladores.
* En la tercera línea entre STM05-1 y 2005, hay dos tabuladores
* En la quinta línea entre la fecha y 07:28 hay dos/tres tabuladores...
library(data.table)
fread("Myfile.txt")
V1 V2 V3 V4 V5 V6
1: STM05-1 2005/02/28 17:35 Good -35.562 177.158
2: STM05-1 2005/02/28 19:44 Good -35.487 177.129
3: STM05-1 2005/02/28 23:01 Unknown -35.399 177.064
4: STM05-1 2005/03/01 07:28 Unknown -34.978 177.268
5: STM05-1 2005/03/01 18:06 Poor -34.799 177.027
6: STM05-1 2005/03/01 18:47 Poor -34.850 177.059
7: STM05-2 2005/02/28 12:49 Good -35.928 177.328
8: STM05-2 2005/02/28 21:23 Poor -35.926 177.314
Starting data input on line 2 and discarding line 1 because it has
too few or too many items to be column names or data: DeployID Date.Time
LocationQuality Latitude Longitude
library(readr)
read_table("Myfile.txt")
DeployID Date.Time LocationQuality Latitude Longitude
1 STM05-1 2005/02/28 17:35 Good -35.562 177.158
2 STM05-1 2005/02/28 19:44 Good -35.487 177.129
3 STM05-1 2005/02/28 23:01 Unknown -35.399 177.064
4 STM05-1 2005/03/01 07:28 Unknown -34.978
5 STM05-1 2005/03/01 18:06 Poor -34.799 177.027
6 STM05-1 2005/03/01 18:47 Poor -34.85 177.059
7 STM05-2 2005/02/28 12:49 Good -35.928 177.328
8 STM05-2 2005/02/28 21:23 Poor -35.926 177.314
La función "fread()" del paquete data.table avisa de un posible error
con la cabecera, pero ignora todas las trampas que hemos puesto y crea
las columnas donde corresponde. Y como cabecera pone directamente "V1",
"V2",....
Mientras que "read_table" ni avisa, e incluye la cabecera y las líneas
con las trampas.
La solución "fread()" puede servirte tal cual. Mientras que read_table
podría ayudarte pero exigiría que luego la salida como data.frame la
post-procesaras...
Cuidado con "fread()" que la salida es un data.table y data.frame.
Mi consejo sería que a la salida de fread() la convirtieras a un
data.frame puro con "as.data.frame()" para no tener problemas. Salvo que
el resto de tu código lo quieras hacer con la sintaxis de data.table.
Gracias,
Carlos Ortega
www.qualityexcellence.es <http://www.qualityexcellence.es>
Muchas gracias Javier ... cuando hay un doble \teb\teb desaparece la
fila completa al importar el archivo a un data.frame, por eso queria
modificarlo antes de importar el archivo, o pensaba que quiza habia
una funcion robusta para importar, que no fuera afectada por el
doble tab
muchas gracias por su sugerencia,
Saludos, Eric.
Estimado Eric
Las filas que faltan, ¿son filas enteras, donde todo es valor NA
o “” en un data.frame?
Porque si es así podrías importar todo y luego buscar (filtrar)
los que no son NA.
Copio y pego un código que utilizo en un trabajo, posiblemente
le sea útil.
Tratamientos$Tratamiento[Tratamientos$Tratamiento == ""] <- NA
# asignar NA a las celdas vacías
Tratamientos<- Tratamientos[ !is.na
<http://is.na>(Tratamientos$Tratamiento),] #Solo dejo filas
en las que las tratamiento son diferentes de cero
Javier Rubén Marcuzzi
De: ja palazon
Enviado: martes, 17 de mayo de 2016 18:06
Asunto: Re: [R-es] buscar y reemplazar tabs dentro de un archivo
Usa la función system para desde R usar las herramientas del sistema.
Hola Jose, muchas gracias por la sugerencia, no conocia la
existencia
de "sed" ... yo preguntaba por la posibilidad de hacerlo con
R mismo
para no tener que escribir algo en otro lenguaje, porque te
refieres a
"sed" en linux, no ? y tambien por lo mucho mejor que es un
script que
hacerlo a mano, considerando que son varios cientos de archivos ...
voy a probar con un script de bash a ver si me funciona.
Muchas gracias a todos,
Saludos, Eric.
Hola
sed 's/^I^I/^I/g' ficheroOriginal.dat >ficheroCorregido.dat
Alternativa: usa la hoja de cálculo de libre office te da
la opción de eliminar repeticiones de separador de campos.
Espero que te sirva
tengo muchos archivos (algunos cientos) con columnas
de datos
separados por \tab y al importar en R me di cuenta
que me faltaban
algunas filas ... despues de 3 dias dandole vueltas
al problema
encontre que las filas que faltaban tenian un doble
\tab en alguna
columna
existe alguna forma de importar los archivos de modo
que el doble \tab
no produzca errores o
existe alguna forma de "abrir" los archivos sin
importarlos en R (pero
con R), buscar y reemplazar ese doble \tab para
luego importar
Saludos y muchas gracias,
Eric,
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
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.
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
--
Saludos,
Carlos Ortega
www.qualityexcellence.es <http://www.qualityexcellence.es>