如何将字符向量中的CSV数据解析为数据框?

17
R中的read.table和read.csv函数用于解析包含定界数据的文件或URL,并生成R数据框。但是,我已经有一个包含CSV定界数据的字符向量(使用逗号和\n作为列和记录定界符),因此我不需要从文件或URL读取它。如何将此字符向量传递到read.tableread.csvscan()中,而无需先将其写入磁盘并重新读取?我知道可以将其写入磁盘,但我正在寻找一种不需要这种无谓往返且可以直接从字符向量中读取数据的解决方案。
2个回答

28
您可以使用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邮件列表

2017年编辑

七年后,我可能会这样做:

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

关于这种方法有一个警告:随着行数的增加,textConnection() 可能会非常慢。在 223k 行的情况下,我发现将数据写入临时 CSV 文件并从中读取速度更快。 :( - Matt Parker

3
neilfws的答案有一个补充。 当提问者在其问题中放置原始数据而不提供数据框时,此包装函数非常有助于在stackoverflow上回答问题。
textToTable <- function(text, ...)
{
   dfr <- read.table(tc <- textConnection(text), ...)
   close(tc)
   dfr
}

随着使用,例如:

textToTable("first,second\nthird,fourth\n", sep = ",")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接