在导入csv列子集时,R中最有效的读取csv函数/包是什么
我正在尝试将csv加载到R中,即c。180k行和c.9k列。我只需要c.100列的子集,并且知道我需要的列的名称 这方面的答案涵盖了在导入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,然后对列进行了子集处理——这是非常低效的,因为我只需要这样一小部分列。我还尝试使用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))