2012-04-29 13 views
5

Ho un file che è delimitato da tabulazioni e contiene più tabelle ciascuna intestata da un titolo, ad esempio "Azuay \ n", "Bolivar \ n", "Cotopaxi \ n ", ecc. e ogni tabella separata da due newline. All'interno di R, come posso leggere in questo file e selezionare solo la tabella (cioè le righe specificate) corrispondenti ad es. "Bolivar", ignorando il tavolo sottostante corrispondente a "Cotopaxi" e la tabella sopra corrispondente a "Azuay".Lettura in righe specifiche abbinate a modelli da un file

NB. Preferirei non modificare il tavolo all'esterno R.

I dati sono come questo. Il file è separato da tabulazioni.

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

Puoi allegare un tipico dati dei file o di esempio? – gauden

risposta

9

Questo sembra fare il lavoro:

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

È grandioso. Inoltre, come ho trovato con i miei file, c'era una tabulazione che gironzolava alla fine delle colonne, quindi una riga aggiuntiva di codice (prima di restituire risultato 'read.table' sarebbe' lines [table.start] <- sub ("\ t $", "", lines [table.start]). " – Kaleb

+0

Bel lavoro, alcune abilità piuttosto eleganti. +1 – Chase

+0

+1 per' lines <- readLines (file) ' –