【问题标题】:Reading a long comma separated line to a column in R将长逗号分隔行读取到 R 中的列
【发布时间】:2016-11-14 03:52:41
【问题描述】:

我有一个很长的逗号分隔字符串,我想将其作为 R 中的列向量读取。 我试着把它读成一个表格,想知道我是否可以把它转置,但是读入表格需要很长时间。

col = read.table("filename.csv", sep = ",", header=FALSE)
colT = t(col)

字符串很大,有 270 万个条目,用逗号分隔。因此它不能在文本编辑器中处理,试图用 '\n' 替换 ',' 是徒劳的。有没有办法在 R 中做到这一点?

【问题讨论】:

  • ?scanread.table 的核心,并且可能会更快。
  • 你在readr包里试过read_csv吗?
  • 不,我没有。我正在尝试
  • 您可以使用 GNU tr(翻译)快速将“,”替换为“\n”:cat filename.csv | tr ',' '\n' > filename_newline.csv

标签: r file csv comma


【解决方案1】:

我们可以使用fread

library(data.table)
fread("filename.csv", header=FALSE)

tmp <- paste(paste0(letters,1:2.7e6),collapse="\n")
system.time(fread(tmp, header=FALSE))
#  user  system elapsed 
#  0.87    0.00    0.88 

如果OP的数据有,而不是\n,我们可以使用gsub作为@thelatemail提到的

fread(gsub(",","\n",tmp),header=FALSE)

【讨论】:

  • 你不需要像fread(gsub(",","\n",tmp),header=FALSE) 这样的东西吗,因为 OP 在他们的数据中没有换行符?
【解决方案2】:

?scan 会很快处理这种事情。

tmp <- paste(paste0(letters,1:2.7e6),collapse=",")
system.time(scan(text=tmp, what=character(1), sep=","))
#Read 2700000 items
#   user  system elapsed 
#   1.15    0.00    1.16 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多