2010-07-16 28 views
16

Các hàm read.table và read.csv trong R được sử dụng để phân tích cú pháp một tệp hoặc URL chứa dữ liệu phân tách và tạo ra một khung dữ liệu R. Tuy nhiên, tôi đã có một vector ký tự chứa dữ liệu phân tách CSV (sử dụng dấu phẩy và \ n làm dấu phân cách cột và bản ghi), vì vậy tôi không cần phải đọc nó từ một tệp hoặc URL. Làm cách nào để chuyển vectơ ký tự này vào read.table, read.csv hoặc scan() mà không ghi nó vào một tệp trên đĩa trước và đọc lại nó? Tôi nhận ra rằng viết nó vào đĩa là có thể, nhưng tôi đang tìm một giải pháp mà không yêu cầu vòng tròn không cần thiết này và có thể đọc dữ liệu từ vector ký tự trực tiếp.Làm cách nào để phân tích cú pháp dữ liệu CSV từ vectơ ký tự để trích xuất khung dữ liệu?

Trả lời

24

Bạn có thể sử dụng textConnection() để chuyển vector ký tự tới read.table(). Ví dụ:

x <- "first,second\nthird,fourth\n" 
x1 <- read.table(textConnection(x), sep = ",") 
# x1 
    V1  V2 
1 first second 
2 third fourth 

Trả lời được tìm thấy trong số R mailing list.

2017 EDIT

Bảy năm sau, tôi có lẽ muốn làm điều đó như thế này:

read.table(text = x, sep = ",") 
+0

Một cảnh báo về cách tiếp cận này: 'textConnection()' có thể rất chậm khi số lượng hàng tăng lên. Tại 223k hàng, tôi tìm thấy nó nhanh hơn để ghi vào một CSV tạm thời, và đọc nó trong. :( –

3

Một phụ lục nhỏ để trả lời neilfws của. Hàm wrapper này rất hữu ích để giúp trả lời các câu hỏi trên stackoverflow khi người hỏi đã đặt dữ liệu thô vào câu hỏi của họ thay vì cung cấp một khung dữ liệu.

textToTable <- function(text, ...) 
{ 
    dfr <- read.table(tc <- textConnection(text), ...) 
    close(tc) 
    dfr 
} 

Với cách sử dụng, ví dụ:

textToTable("first,second\nthird,fourth\n", sep = ",") 
Các vấn đề liên quan