R 如何从字符向量解析CSV数据以提取数据帧?

R 如何从字符向量解析CSV数据以提取数据帧?,r,parsing,csv,dataframe,import-from-csv,R,Parsing,Csv,Dataframe,Import From Csv,R中的read.table和read.csv函数用于解析包含分隔数据的文件或URL,并生成R数据帧。但是,我已经有了一个包含CSV分隔数据的字符向量(使用逗号和\n作为列和记录分隔符),因此我不需要从文件或URL读取它。如何将此字符向量传递到read.table、read.csv、或scan(),而不首先将其写入磁盘上的文件并重新读取?我意识到将其写入磁盘是可能的,但我正在寻找一种解决方案,它不需要这种不必要的往返,并且可以直接从字符向量读取数据。您可以使用textConnection()将字符

R中的read.table和read.csv函数用于解析包含分隔数据的文件或URL,并生成R数据帧。但是,我已经有了一个包含CSV分隔数据的字符向量(使用逗号和\n作为列和记录分隔符),因此我不需要从文件或URL读取它。如何将此字符向量传递到
read.table
read.csv
、或
scan()
,而不首先将其写入磁盘上的文件并重新读取?我意识到将其写入磁盘是可能的,但我正在寻找一种解决方案,它不需要这种不必要的往返,并且可以直接从字符向量读取数据。

您可以使用textConnection()将字符向量传递给read.table()。例如:

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

neilfws回答的一个小附录。当提问者将原始数据放入问题中而不是提供数据框时,此包装器函数非常适合帮助回答有关stackoverflow的问题

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

关于这种方法有一个警告:
textConnection()
可能会随着行数的增加而变得非常缓慢。在223k行中,我发现写入临时CSV并在中读取它的速度更快(
textToTable <- function(text, ...)
{
   dfr <- read.table(tc <- textConnection(text), ...)
   close(tc)
   dfr
}
textToTable("first,second\nthird,fourth\n", sep = ",")