Estimad en s eRRer en s, Tengo un txt que quiero importar a R. Pero no tiene un formato adecuado para usar cosas normales, como por ejemplo read.csv() El formato es algo así: time 1 col1 col2 col3 col4 dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato end time 2 col1 col2 col3 col4 dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato end time 3 col1 col2 col3 col4 dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato dato end Lo que me gustaría decirle a R es "ves a donde pone time y tráete X lineas" o "ves a donde pone time y tráete lineas hasta que llegues a end" En realidad debe ser bastante fácil, todas las tablas empiezan con time y acaban con end y tienen el mismo numero de filas. He estado mirando readPlain(), scan(), readfile()... pero le puedes decir cuantas lineas leer pero no donde empezar... creo. ¿Alguna pista de por donde puedo empezar a mirar? Muchas gracias. -- Jaume Tormo. https://es.linkedin.com/in/jaumetormo https://acercad.wordpress.com/ [[alternative HTML version deleted]]
Hola desconozco como hacer eso en R. Yo lo har?a editando el archivo por fuera
utilizando sed para eliminar los nombres de columnas, los time #, los end y
finalmente las l?neas en blanco, despu?s lo leer?a en R con read.csv
Saludos
________________________________
De: R-help-es <r-help-es-bounces en r-project.org> en nombre de Jaume
Tormo <jautorbla en gmail.com>
Enviado: martes, 12 de febrero de 2019 12:16 p. m.
Para: r-help-es en r-project.org
Asunto: [R-es] Leer un txt a trozos
Estimad en s eRRer en s,
Tengo un txt que quiero importar a R.
Pero no tiene un formato adecuado para usar cosas normales, como por
ejemplo read.csv()
El formato es algo as?:
time 1
col1 col2 col3 col4
dato dato dato dato
dato dato dato dato
dato dato dato dato
dato dato dato dato
dato dato dato dato
end
time 2
col1 col2 col3 col4
dato dato dato dato
dato dato dato dato
dato dato dato dato
dato dato dato dato
dato dato dato dato
end
time 3
col1 col2 col3 col4
dato dato dato dato
dato dato dato dato
dato dato dato dato
dato dato dato dato
dato dato dato dato
end
Lo que me gustar?a decirle a R es "ves a donde pone time y tr?ete X
lineas"
o "ves a donde pone time y tr?ete lineas hasta que llegues a end"
En realidad debe ser bastante f?cil, todas las tablas empiezan con time y
acaban con end y tienen el mismo numero de filas.
He estado mirando readPlain(), scan(), readfile()... pero le puedes decir
cuantas lineas leer pero no donde empezar... creo.
?Alguna pista de por donde puedo empezar a mirar?
Muchas gracias.
--
Jaume Tormo.
https://es.linkedin.com/in/jaumetormo
https://acercad.wordpress.com/
[[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
[[alternative HTML version deleted]]
Hola:
Yo haría algo basado en esto. Obviamente habría que tunearlo pero no
sería muy complicado
texto<- scan("texto.txt", what="character")
times<-grep("time", texto)
ends<- grep("end", texto)
for ( i in 1: length(times))
print(matrix(texto[(times[i]+2):(ends[i]-1)], nc=4, byrow=T))
Saudos,
Marcelino
El 12/02/2019 a las 19:33, Javier Nieto escribió:> Hola desconozco como hacer eso en R. Yo lo har?a editando el archivo por
fuera utilizando sed para eliminar los nombres de columnas, los time #, los end
y finalmente las l?neas en blanco, despu?s lo leer?a en R con read.csv
>
> Saludos
> ________________________________
> De: R-help-es <r-help-es-bounces en r-project.org> en nombre de Jaume
Tormo <jautorbla en gmail.com>
> Enviado: martes, 12 de febrero de 2019 12:16 p. m.
> Para: r-help-es en r-project.org
> Asunto: [R-es] Leer un txt a trozos
>
> Estimad en s eRRer en s,
>
> Tengo un txt que quiero importar a R.
> Pero no tiene un formato adecuado para usar cosas normales, como por
> ejemplo read.csv()
> El formato es algo as?:
> time 1
> col1 col2 col3 col4
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> end
>
> time 2
> col1 col2 col3 col4
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> end
>
> time 3
> col1 col2 col3 col4
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> end
>
> Lo que me gustar?a decirle a R es "ves a donde pone time y tr?ete X
lineas"
> o "ves a donde pone time y tr?ete lineas hasta que llegues a end"
> En realidad debe ser bastante f?cil, todas las tablas empiezan con time y
> acaban con end y tienen el mismo numero de filas.
> He estado mirando readPlain(), scan(), readfile()... pero le puedes decir
> cuantas lineas leer pero no donde empezar... creo.
> ?Alguna pista de por donde puedo empezar a mirar?
>
> Muchas gracias.
>
>
> --
> Jaume Tormo.
> https://es.linkedin.com/in/jaumetormo
> https://acercad.wordpress.com/
>
> [[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
>
> [[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
--
Marcelino de la Cruz Rot
Depto. de Biología y Geología
Física y Química Inorgánica
Universidad Rey Juan Carlos
Móstoles España
Si importas esa tabla de datos en una planilla electrónica y ordenas por la primera columna, fácilmente puedes eliminar todos los time X, end y nombres de columna y luego importar todos los datos juntos de la forma normal en R. Me ha tocado hacerlo muchas veces y es lo mas eficiente. Lo otro es hacer un pequeño loop en R pero eso le toma muchos mas tiempo a R ejecutarlo que a ti hacerlo a mano. Saludos !! Eric. On 12/02/2019 15:16, Jaume Tormo wrote:> Estimad en s eRRer en s, > > Tengo un txt que quiero importar a R. > Pero no tiene un formato adecuado para usar cosas normales, como por > ejemplo read.csv() > El formato es algo así: > time 1 > col1 col2 col3 col4 > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > end > > time 2 > col1 col2 col3 col4 > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > end > > time 3 > col1 col2 col3 col4 > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > end > > Lo que me gustaría decirle a R es "ves a donde pone time y tráete X lineas" > o "ves a donde pone time y tráete lineas hasta que llegues a end" > En realidad debe ser bastante fácil, todas las tablas empiezan con time y > acaban con end y tienen el mismo numero de filas. > He estado mirando readPlain(), scan(), readfile()... pero le puedes decir > cuantas lineas leer pero no donde empezar... creo. > ¿Alguna pista de por donde puedo empezar a mirar? > > Muchas gracias. > >
Aunque prefiero desde un terminal con sed, otra forma de hacerlo sin loops en R
ser?a as?:
file <- "texto.txt"
my.Data <- readChar(file, file.info(file)$size)
my.Data <- gsub("(col1 col2 col3 col4\r\n)+", "",
my.Data)
my.Data <- gsub("time [0-9]+\r\n", "", my.Data)
my.Data <- gsub("end\r\n|end$", "", my.Data)
my.Data <- gsub("(\r\n)$", "", my.Data)
my.Data <- gsub("^$\r\n", "", my.Data)
my.Data <- gsub("(\r\n)+", "\n", my.Data)
my.Data <- read.table(text = my.Data, sep = " ", header = F,
stringsAsFactors = F)
names(my.Data) <- c("col1", "col2", "col3",
"col4")
my.Data
S?lo debes tener cuidado con los saltos de l?nea y retorno de carro as? como del
separador de tus columnas.
Saludos
________________________________
De: R-help-es <r-help-es-bounces en r-project.org> en nombre de Eric
<ericconchamunoz en gmail.com>
Enviado: martes, 12 de febrero de 2019 03:27 p. m.
Para: Jaume Tormo; r-help-es en r-project.org
Asunto: Re: [R-es] Leer un txt a trozos
Si importas esa tabla de datos en una planilla electr?nica y ordenas por
la primera columna, f?cilmente puedes eliminar todos los time X, end y
nombres de columna y luego importar todos los datos juntos de la forma
normal en R. Me ha tocado hacerlo muchas veces y es lo mas eficiente. Lo
otro es hacer un peque?o loop en R pero eso le toma muchos mas tiempo a
R ejecutarlo que a ti hacerlo a mano.
Saludos !!
Eric.
On 12/02/2019 15:16, Jaume Tormo wrote:> Estimad en s eRRer en s,
>
> Tengo un txt que quiero importar a R.
> Pero no tiene un formato adecuado para usar cosas normales, como por
> ejemplo read.csv()
> El formato es algo as?:
> time 1
> col1 col2 col3 col4
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> end
>
> time 2
> col1 col2 col3 col4
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> end
>
> time 3
> col1 col2 col3 col4
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> end
>
> Lo que me gustar?a decirle a R es "ves a donde pone time y tr?ete X
lineas"
> o "ves a donde pone time y tr?ete lineas hasta que llegues a end"
> En realidad debe ser bastante f?cil, todas las tablas empiezan con time y
> acaban con end y tienen el mismo numero de filas.
> He estado mirando readPlain(), scan(), readfile()... pero le puedes decir
> cuantas lineas leer pero no donde empezar... creo.
> ?Alguna pista de por donde puedo empezar a mirar?
>
> Muchas gracias.
>
>
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]
Estimado Jaume Tormo Leí algunas respuestas, con todas hay que tener mucho cuidado, no por la respuesta en sí, sino por como están los datos, porque en el texto por ahí hay alguna tabulación, otro espacio, algo que al ojo humano no se ve pero que está en el código y al procesar aparecen errores, o se procesa con error no visible destruyendo los datos originales. Yo desconozco cuántos datos tiene, pero, personalmente no me gusta automatizar la toda de datos desde archivos de texto cuándo sospecho que algo no puede estar estandarizado. Javier Rubén Marcuzzi El mar., 12 feb. 2019 a las 15:16, Jaume Tormo (<jautorbla en gmail.com>) escribió:> Estimad en s eRRer en s, > > Tengo un txt que quiero importar a R. > Pero no tiene un formato adecuado para usar cosas normales, como por > ejemplo read.csv() > El formato es algo así: > time 1 > col1 col2 col3 col4 > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > end > > time 2 > col1 col2 col3 col4 > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > end > > time 3 > col1 col2 col3 col4 > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > dato dato dato dato > end > > Lo que me gustaría decirle a R es "ves a donde pone time y tráete X lineas" > o "ves a donde pone time y tráete lineas hasta que llegues a end" > En realidad debe ser bastante fácil, todas las tablas empiezan con time y > acaban con end y tienen el mismo numero de filas. > He estado mirando readPlain(), scan(), readfile()... pero le puedes decir > cuantas lineas leer pero no donde empezar... creo. > ¿Alguna pista de por donde puedo empezar a mirar? > > Muchas gracias. > > > -- > Jaume Tormo. > https://es.linkedin.com/in/jaumetormo > https://acercad.wordpress.com/ > > [[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 >[[alternative HTML version deleted]]
Muchísimas gracias a todos. Ya tengo por donde empezar, a ver si cuando acabe os pongo al día. Jaume. El mié., 13 feb. 2019 a las 13:17, Javier Marcuzzi (< javier.ruben.marcuzzi en gmail.com>) escribió:> Estimado Jaume Tormo > > Leí algunas respuestas, con todas hay que tener mucho cuidado, no por la > respuesta en sí, sino por como están los datos, porque en el texto por ahí > hay alguna tabulación, otro espacio, algo que al ojo humano no se ve pero > que está en el código y al procesar aparecen errores, o se procesa con > error no visible destruyendo los datos originales. > > Yo desconozco cuántos datos tiene, pero, personalmente no me gusta > automatizar la toda de datos desde archivos de texto cuándo sospecho que > algo no puede estar estandarizado. > > Javier Rubén Marcuzzi > > El mar., 12 feb. 2019 a las 15:16, Jaume Tormo (<jautorbla en gmail.com>) > escribió: > >> Estimad en s eRRer en s, >> >> Tengo un txt que quiero importar a R. >> Pero no tiene un formato adecuado para usar cosas normales, como por >> ejemplo read.csv() >> El formato es algo así: >> time 1 >> col1 col2 col3 col4 >> dato dato dato dato >> dato dato dato dato >> dato dato dato dato >> dato dato dato dato >> dato dato dato dato >> end >> >> time 2 >> col1 col2 col3 col4 >> dato dato dato dato >> dato dato dato dato >> dato dato dato dato >> dato dato dato dato >> dato dato dato dato >> end >> >> time 3 >> col1 col2 col3 col4 >> dato dato dato dato >> dato dato dato dato >> dato dato dato dato >> dato dato dato dato >> dato dato dato dato >> end >> >> Lo que me gustaría decirle a R es "ves a donde pone time y tráete X >> lineas" >> o "ves a donde pone time y tráete lineas hasta que llegues a end" >> En realidad debe ser bastante fácil, todas las tablas empiezan con time y >> acaban con end y tienen el mismo numero de filas. >> He estado mirando readPlain(), scan(), readfile()... pero le puedes decir >> cuantas lineas leer pero no donde empezar... creo. >> ¿Alguna pista de por donde puedo empezar a mirar? >> >> Muchas gracias. >> >> >> -- >> Jaume Tormo. >> https://es.linkedin.com/in/jaumetormo >> https://acercad.wordpress.com/ >> >> [[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 >> >-- Jaume Tormo. https://es.linkedin.com/in/jaumetormo https://acercad.wordpress.com/ [[alternative HTML version deleted]]
Hola a todos,
Muchas gracias a todos por la ayuda. Marcelino, tu idea ha sido la clave.
A falta de alguna comprobación os pego aquí el script que he hecho...
parece que funciona.
Por si le sirve a alguien, los datos son el output de hydrus 1D (
https://www.pc-progress.com/en/Default.aspx?hydrus-1d)
El archivo original lo podéis ver aquí:
https://www.dropbox.com/s/41b5wexpjdnztm9/Nod_Inf.out?dl=0
SCRIPT:
## **** recuerda quitar a mano las unidades en el archivo de texto ****
file<-"/home/jaume/Dropbox/FEINA/tasca_WTAM/models_sol/Hydrus/ModelDmoret_20190212/JAume/Nod_Inf.out.proves"
## cargar los datos
texto <- scan(file, what ="character") #hace un vector de
strings, un
elemento por string
texto <- texto[c(26:length(texto))] #quitamos la cabecera
head(texto)
## marcar los time y end
times <- grep("Time:",texto) #posición de los time
ends <- grep("end",texto) #posición de los end
head(times);head(ends) #comprobar
head(texto)
## creamos la matriz para guardar
matriufinal<-matrix(c(1:12),nrow=1)
#rbind(matriufinal,c(1,2,3,4,5,6,7,8,9,10,11,12))
## empieza
for ( i in 1:length(times)){
#i<-1
## sacar la matriz para cada time
inici<-times[i]+2 #lugar donde empieza la matriz
final<-ends[i]-1 #lugar donde acaba la matriz
troç<-texto[c(inici:final)] #texto de la primera matriz guardado
como troç
head(troç,11);tail(troç,11) #comprobar
m<-matrix(troç,nc=11,byrow = T) #hacemos la matriz
## primera fila con nombres de columna
colnames(m)<-m[1,] # ponemos el nombre
m<-m[-1,] # Borramos la fila de nombres
## añadir columna diciendo el timepo (Time)
m<-cbind(m,rep(i-1,nrow(m)))
colnames(m)[12]<-"time"
## añadirlo a la matriz final
matriufinal<-rbind(matriufinal,m)
}
## convertirlo en dataframe
dades.m<-matriufinal
# quitarar la primera columna que habiamo puesto al crear la matriz de
guardar
dades.m<-dades.m[-1,]
# convertir en numérico
mode(dades.m)<-"numeric"
#convertir en dataframe
dades<-as.data.frame(dades.m)
Jaume.
El mar., 12 feb. 2019 a las 19:16, Jaume Tormo (<jautorbla en gmail.com>)
escribió:
> Estimad en s eRRer en s,
>
> Tengo un txt que quiero importar a R.
> Pero no tiene un formato adecuado para usar cosas normales, como por
> ejemplo read.csv()
> El formato es algo así:
> time 1
> col1 col2 col3 col4
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> end
>
> time 2
> col1 col2 col3 col4
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> end
>
> time 3
> col1 col2 col3 col4
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> dato dato dato dato
> end
>
> Lo que me gustaría decirle a R es "ves a donde pone time y tráete X
> lineas" o "ves a donde pone time y tráete lineas hasta que
llegues a end"
> En realidad debe ser bastante fácil, todas las tablas empiezan con time y
> acaban con end y tienen el mismo numero de filas.
> He estado mirando readPlain(), scan(), readfile()... pero le puedes decir
> cuantas lineas leer pero no donde empezar... creo.
> ¿Alguna pista de por donde puedo empezar a mirar?
>
> Muchas gracias.
>
>
> --
> Jaume Tormo.
> https://es.linkedin.com/in/jaumetormo
> https://acercad.wordpress.com/
>
--
Jaume Tormo.
https://es.linkedin.com/in/jaumetormo
https://acercad.wordpress.com/
[[alternative HTML version deleted]]