2011-12-28 10 views
5

Estoy tratando de automatizar la lectura de archivos generados desde otro programa de análisis.¿Se puede especificar el número de columnas en read.table?

La salida estándar es típicamente en 6 columnas separadas por espacios con un retorno de carro al final. Esto se puede leer simplemente usando "strip.white = TRUE" en "read.table".

Tengo un problema, sin embargo, b/c se agrega una anotación a una línea si un parámetro se ha solucionado como una constante.
Adición de "flush = TRUE" me permite saltar sobre estos comentarios ocasionales y leí todo en.

Lo que me gustaría hacer es tener estos comentarios, que sólo pueden ocurrir una vez en un archivo determinado, añadirse como una 7ma columna.

¿Hay un enfoque de lectura que me permita especificar el número de columnas o alguna otra forma de en esta séptima columna?

Un fragmento de datos se puede encontrar here

Los datos se ven así:

columns_1&2 column_3 column_4 column_6 column_6 column_7  
84:S 0:dorm 1.0000000 0.11E-005 0.9999979 1.0000021       
85:p N:veg 1.0000000 0.0000000 1.0000000 1.0000000 Fixed    
86:p 0:dorm 0.260E-08 0.237E-05 -0.03E-05 0.46E-005 

Respuesta

9

Si todas las columnas están tan bien ordenados como los que en el ejemplo enlazado (es decir, si se trata de una "archivo de ancho fijo"), entonces este es un trabajo para read.fwf():

df <- read.fwf(file = "http://dl.dropbox.com/u/54791824/SO_data_frag.txt", 
       widths = c(8, 7, 29, 15, 16, 16,1000)) 

head(df,4) 
     V1  V2 V3   V4  V5  V6   V7 
1 82:S 0:dorm 1 1.625420e-06 0.9999968 1.000003      
2 83:S 0:dorm 1 1.083245e-06 0.9999979 1.000002      
3 84:S 0:dorm 1 1.081771e-06 0.9999979 1.000002      
4 85:p N:veg 1 0.000000e+00 1.0000000 1.000000 Fixed 

EDIT: Alternativamente, como J Oran señala en los comentarios, se puede usar con la opción read.table()fill=TRUE:

df2 <- read.table(file = "http://dl.dropbox.com/u/54791824/SO_data_frag.txt", 
        fill = TRUE, 
        col.names=paste("column", 1:7, sep="_") 
+3

@NBrouwer creo que también se puede configurar 'llenar = TRUE y especificar los nombres de columna utilizando directamente' col.names'. – joran

+0

@joran - Gracias por mencionar esa otra opción/mejor. Lo he resaltado arriba. –

Cuestiones relacionadas