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