2010-07-16 8 views
16

R의 read.table 및 read.csv 함수는 구분 된 데이터가 포함 된 파일 또는 URL을 구문 분석하고 R 데이터 프레임을 생성하는 데 사용됩니다. 그러나 이미 CSV로 구분 된 데이터 (쉼표와 \ n을 열과 레코드 구분 기호로 사용)가 포함 된 문자 벡터가 있으므로 파일이나 URL에서 읽을 필요가 없습니다. 이 문자 벡터를 먼저 디스크의 파일에 쓰고 다시 읽지 않고 read.table, read.csv 또는 scan()으로 전달할 수 있습니까? 디스크에 쓰는 것이 가능하다는 것을 알고 있지만이 불필요한 왕복을 필요로하지 않으며 문자 벡터에서 직접 데이터를 읽을 수있는 솔루션을 찾고 있습니다.문자 벡터에서 CSV 데이터를 구문 분석하여 데이터 프레임을 추출하려면 어떻게해야합니까?

답변

24

textConnection()을 사용하여 문자 벡터를 read.table()에 전달할 수 있습니다. 예 :

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

답변은 R mailing list에 있습니다.

2017 EDIT

7 년 후, 나는 이렇게 그것을 할 아마 것 : neilfws의 대답에

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

이 접근법에 대한 한 가지 경고 :'textConnection()'은 행 수가 증가함에 따라 매우 느릴 수 있습니다. 223k 행에서 임시 CSV에 빠르게 쓰고 읽을 수 있습니다. –

3

사소한 부록. 이 래퍼 함수는 질문자가 데이터 프레임을 제공하는 대신 질문에 원시 데이터를 배치했을 때 stackoverflow에 대한 질문에 대답하는 데 유용합니다.

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

textToTable("first,second\nthird,fourth\n", sep = ",") 
관련 문제