读取R中的CSV并按名称筛选列

读取R中的CSV并按名称筛选列,r,csv,readr,R,Csv,Readr,假设我有一个CSV,有几十列或几百列,我只想拉进大约2或3列。我知道所描述的colClasses解决方案,但是代码变得非常不可读 我想从中获得类似于usecols的内容 加载所有内容并在之后进行选择不是一个解决方案(文件太大,无法放入内存)。我将使用packagedata.table,然后使用fread()指定要保留/按参数删除的列select或drop。从?fread 选择要保留的列名或数字的向量,删除其余的 删除要删除的列名或数字的向量,保留其余部分 最好的 一种方法是使用packagesq

假设我有一个CSV,有几十列或几百列,我只想拉进大约2或3列。我知道所描述的
colClasses
解决方案,但是代码变得非常不可读

我想从中获得类似于
usecols
的内容


加载所有内容并在之后进行选择不是一个解决方案(文件太大,无法放入内存)。

我将使用package
data.table
,然后使用
fread()
指定要保留/按参数删除的列
select
drop
。从
?fread

选择要保留的列名或数字的向量,删除其余的

删除要删除的列名或数字的向量,保留其余部分


最好的

一种方法是使用package
sqldf
。如果您了解SQL,就可以读取大文件,只过滤您想要的部分

我将使用内置的dataset
iris
使示例重现,首先将其保存到磁盘

write.csv(iris, "iris.csv", row.names = FALSE)
现在问题来了。
参数
row.names
类似于
write.csv
指令中的参数。
注意
萼片长度周围的倒勾。这是由于列名中的点字符造成的

library(sqldf)

sql <- "select `Sepal.Length`, Species from file"
sub_iris <- read.csv.sql("iris.csv", sql = sql, row.names = FALSE)

head(sub_iris)
#  Sepal.Length  Species
#1          5.1 "setosa"
#2          4.9 "setosa"
#3          4.7 "setosa"
#4          4.6 "setosa"
#5          5.0 "setosa"
#6          5.4 "setosa"
unlink("iris.csv")