2012-04-29 29 views
5

Tôi có một tệp được phân định bằng tab và chứa nhiều bảng được mỗi đầu dẫn đầu, ví dụ: "Azuay \ n", "Bolivar \ n", "Cotopaxi \ n ", vv và mỗi bảng được phân tách bằng hai dòng mới. Trong R, làm cách nào tôi có thể đọc trong tệp này và chỉ chọn bảng (tức là các hàng được chỉ định) tương ứng với ví dụ: "Bolivar", trong khi bỏ qua bảng bên dưới tương ứng với "Cotopaxi" và bảng ở trên tương ứng với "Azuay".Đọc các hàng cụ thể, phù hợp với mẫu từ một tệp

NB. Tôi không muốn sửa đổi bảng bên ngoài R.

Dữ liệu trông như thế này. Tệp được phân tách bằng tab.

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

Bạn có thể đính kèm một tập tin hoặc mẫu điển hình dữ liệu? – gauden

Trả lời

9

Điều này dường như thực hiện công việc:

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

Tuyệt vời. Ngoài ra, như tôi tìm thấy với các tập tin của tôi, có một tab treo xung quanh ở cuối các cột, do đó, một dòng thêm mã (trước khi trả về 'read.table' kết quả sẽ là' dòng [table.start] <- sub ("\ t $", "", dòng [table.start]) '. – Kaleb

+0

Công việc tuyệt vời, một số kỹ năng khá tiện lợi ở đó. +1 – Chase

+0

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

Các vấn đề liên quan