2012-04-29 7 views
5

Tengo un archivo delimitado por tabuladores y contiene varias tablas, cada una encabezada por un título, por ejemplo "Azuay \ n", "Bolivar \ n", "Cotopaxi \" n ", etc., y cada tabla separada por dos líneas nuevas. Dentro de R, ¿cómo puedo leer en este archivo y seleccionar solo la tabla (es decir, las filas especificadas) correspondiente a, p. "Bolivar", mientras se ignora la tabla debajo correspondiente a "Cotopaxi" y la tabla anterior correspondiente a "Azuay".Leer en filas específicas, coincidentes con patrones de un archivo

NB. Preferiría no modificar la tabla fuera de R.

Los datos son así. El archivo está separado por tabuladores.

Azuay 
region begin  stop 
1A  2017761  148749885 
1A  148863885 150111299 
1A  150329391 150346152 
1A  150432847 247191037 


Bolivar 
region begin   stop 
2A  2785   242068364 
2A  736640   198339289 


Cotopaxi 
region begin   stop 
4A  2282   9951846 
4A  11672561  11906166 
+0

¿Se puede adjuntar un archivo de datos o muestras típicas? – gauden

Respuesta

9

Esto parece hacer el trabajo:

read.entry.table <- function(file, entry) { 

    lines <- readLines(file) 

    table.entry <- lines == entry 
    if (sum(table.entry) != 1) stop(paste(entry, "not found")) 

    empty.lines <- which(lines == "") 
    empty.lines <- c(empty.lines, length(lines) + 1L) 

    table.start <- which(table.entry) + 1L 
    table.end <- empty.lines[which(empty.lines > table.start)[1]] - 1L 

    return(read.table(textConnection(lines[seq(from = table.start, 
               to = table.end)]), 
        header = TRUE)) 
} 

read.entry.table("test.txt", "Bolivar") 
# region begin  stop 
# 1  2A 2785 242068364 
# 2  2A 736640 198339289 

read.entry.table("test.txt", "Cotopaxi") 
# region begin  stop 
# 1  4A  2282 9951846 
# 2  4A 11672561 11906166 
+1

Eso es genial. Además, como encontré con mis archivos, había una pestaña al final de las columnas, por lo que una línea adicional de código (antes del resultado 'read.table' de retorno sería 'lines [table.start] <- sub ("\ t $", "", líneas [table.start]) '. – Kaleb

+0

Buen trabajo, algunas habilidades bastante ingeniosas. +1 – Chase

+0

+1 para' líneas <- readLines (archivo) ' –

Cuestiones relacionadas