在导入csv列子集时,R中最有效的读取csv函数/包是什么

在导入csv列子集时,R中最有效的读取csv函数/包是什么,r,csv,import,fread,readr,R,Csv,Import,Fread,Readr,我正在尝试将csv加载到R中,即c。180k行和c.9k列。我只需要c.100列的子集,并且知道我需要的列的名称 这方面的答案涵盖了在导入csv时选择列子集的许多不同选项 使用这些答案,以及我自己的知识,我尝试使用和来自,来自和来自。所有这些函数似乎都导入了整个csv,然后对列进行了子集处理——这是非常低效的,因为我只需要这样一小部分列。我还尝试使用from,这似乎很有希望,因为选择特定的列是一项非常常见的SQL任务,但我无法导入列的子集,因为我遇到了错误错误:文件中的列太多 社区的两项贡献将真

我正在尝试将csv加载到R中,即c。180k行和c.9k列。我只需要c.100列的子集,并且知道我需要的列的名称

这方面的答案涵盖了在导入csv时选择列子集的许多不同选项


使用这些答案,以及我自己的知识,我尝试使用和来自,来自和来自。所有这些函数似乎都导入了整个csv,然后对列进行了子集处理——这是非常低效的,因为我只需要这样一小部分列。我还尝试使用from,这似乎很有希望,因为选择特定的列是一项非常常见的SQL任务,但我无法导入列的子集,因为我遇到了错误
错误:文件中的列太多

社区的两项贡献将真正帮助我:

  • 谁能指出一个不同的导入函数,在我只需要一部分列的情况下,它会更有效
  • 有谁能提供更多关于这些函数如何工作的上下文,纠正我的误解,或者让我确信我正在寻找的解决方案不存在
  • 非常感谢


    另外,我以前没有问过很多关于SO的问题,所以如果我需要以不同的方式提问,我希望得到反馈。

    有许多命令行实用程序(例如sed、awk、cut、csvfix、miller、csvkit、csvtk)可以做到这一点。下面我们使用。这将在文件到达R之前删除不需要的列。如果iot不在路径上,请使用xsv的完整路径
    xsv
    接受如下所示的列名或字段号

    # write out test data
    write.csv(iris, "iris-test.csv", quote = FALSE, row.names = FALSE)
    
    cmd <- "xsv select Sepal.Length,Petal.Length-Species iris-test.csv"
    DF <- read.csv(pipe(cmd))
    
    head(DF)
    ##   Sepal.Length Petal.Length Petal.Width Species
    ## 1          5.1          1.4         0.2  setosa
    ## 2          4.9          1.4         0.2  setosa
    ## 3          4.7          1.3         0.2  setosa
    ## 4          4.6          1.5         0.2  setosa
    ## 5          5.0          1.4         0.2  setosa
    ## 6          5.4          1.7         0.4  setosa
    

    如果知道要读入的列,是否可以选择预处理文件?你的操作系统是什么?“所有这些函数似乎都会导入整个csv,然后对列进行子集化,这在我只需要如此小的列子集的情况下是非常低效的。”这不是真的。我的经验是fread是最快的。无论是
    data.table::fread
    还是
    vroom::vroom
    都应该允许您在不将整个文件加载到内存的情况下加载特定列。感谢所有人提供的有用注释。我将尝试对我尝试过的不同选项和人们提出的其他建议进行一些基准测试,以说明效率,然后进行更新。
    cmd2 <- "cut -d, -f 1,3-5 iris-test.csv"
    DF <- read.csv(pipe(cmd2))