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 (<jautor...@gmail.com>) escribió: > Estimad@s eRRer@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]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es