[R-es] Leer un txt a trozos
Jaume Tormo
j@utorb|@ @end|ng |rom gm@||@com
Lun Feb 18 18:51:59 CET 2019
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 using gmail.com>)
escribió:
> Estimad using s eRRer using 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]]
Más información sobre la lista de distribución R-help-es