读取R中的CSV并按名称筛选列
假设我有一个CSV,有几十列或几百列,我只想拉进大约2或3列。我知道所描述的读取R中的CSV并按名称筛选列,r,csv,readr,R,Csv,Readr,假设我有一个CSV,有几十列或几百列,我只想拉进大约2或3列。我知道所描述的colClasses解决方案,但是代码变得非常不可读 我想从中获得类似于usecols的内容 加载所有内容并在之后进行选择不是一个解决方案(文件太大,无法放入内存)。我将使用packagedata.table,然后使用fread()指定要保留/按参数删除的列select或drop。从?fread 选择要保留的列名或数字的向量,删除其余的 删除要删除的列名或数字的向量,保留其余部分 最好的 一种方法是使用packagesq
colClasses
解决方案,但是代码变得非常不可读
我想从中获得类似于usecols
的内容
加载所有内容并在之后进行选择不是一个解决方案(文件太大,无法放入内存)。我将使用package
data.table
,然后使用fread()
指定要保留/按参数删除的列select
或drop
。从?fread
选择要保留的列名或数字的向量,删除其余的
删除要删除的列名或数字的向量,保留其余部分
最好的 一种方法是使用package
sqldf
。如果您了解SQL,就可以读取大文件,只过滤您想要的部分
我将使用内置的datasetiris
使示例重现,首先将其保存到磁盘
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")