【问题标题】:Reading a large csv file using colbycol使用 colbycol 读取大型 csv 文件
【发布时间】:2013-09-18 08:56:33
【问题描述】:

我有一个包含三行的 csv 文件。第一行有 7 个整数值,第二行有 5,第三行有 3。我想使用 colbycol 读取这些数据,然后在每一列上运行 fft。但在第一步中,如果我使用这个命令:

cbc.read.table<-cbc.read.table("c:\\users\\Babak\\Desktop\\test1.csv",header=FALSE, sep=",")

我收到此错误:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  line 2 did not have 7 elements

我的问题是,是否可以使用 colbycol 读取 CSV 文件

更新 我的 CSV 文件仅包含:

14,25,83,64,987,45,78
15,45,32,14,4,8
14,89,14,87,37,456

【问题讨论】:

  • 我假设这三行只是文件的标题(否则,它不符合“大”的条件):您可以通过将 skip 参数设置为非零值来跳过它们.
  • @VincentZoonekynd 我自己创建了 csv 文件,但它们不是标题。我已经更新了我的帖子。你可以看到我的 csv 文件的内容
  • 但是 fill=TRUE 不适用于cbc.read.table 我已经测试过了

标签: r csv


【解决方案1】:

您的文件是否真的足够大以至于需要使用cbc.read.table?我的意思是,您是否尝试过基准功能并对其进行基准测试并发现它们非常需要? Base read.table(下图)即使是大文件也能完成工作。

如果你想处理一个非常大的文件,this question and its answers 描述了除了colbycol 之外的一些策略,这些策略可能比那个包更久经考验(不要不尊重colbycol 作者是谁当然欢迎评论)。

rawtext <- "14,25,83,64,987,45,78
15,45,32,14,4,8
14,89,14,87,37,456"

txt <- read.table(textConnection(rawtext),
                  header = FALSE,
                  sep = ",",
                  fill = TRUE)

给予:

txt
  V1 V2 V3 V4  V5  V6 V7
1 14 25 83 64 987  45 78
2 15 45 32 14   4   8 NA
3 14 89 14 87  37 456 NA
> 

【讨论】:

  • 几乎是 366 MB 的 csv 文件。它包含 7500 列和 10241 行。我已经使用apply 在每一列上运行 fft,但是内存不足以做到这一点,现在我想读取每一列并在其上运行 fft。因此我决定使用colbycol 你是什么意思?
  • 如果您使用read.tablenrowcolClasses 参数预先指定行数和每列的数据类型,R 可以预先分配生成的data.frame 并解析文件快速有效。我以这种方式读取了 400 MB 的 40 列和 500,000 行的 csv 文件,没有问题。
  • 我可以用colClassesnrows 用这个命令成功地实现它:temptb=read.table("c:\\Path\\xxx.csv",header=FALSE,sep=",",colClasses="numeric",nrows=10000)[,1] 但它很慢。正如我所说,我有 10240 行和 7500 列来运行上述命令,我需要 2 分钟。正常吗?我怎样才能做得更好?
猜你喜欢
  • 2021-09-02
  • 1970-01-01
  • 2014-11-15
  • 2019-07-24
  • 2023-02-20
相关资源
最近更新 更多