读取R中的CSV并按名称过滤列

gsm*_*fra 4 csv r readr

假设我有一个包含数十或数百列的CSV,我想提取大约2或3列.我知道这里colClasses描述的解决方案,但代码变得非常难以理解.

我想是usecols熊猫read_csv.

加载所有内容并在之后选择不是一个解决方案(文件超大,它不适合内存).

Rui*_*das 5

一种方法是使用包sqldf.如果您了解SQL,则可以读取大型文件,仅过滤所需的部分.

我将使用内置数据集iris使示例可重现,首先将其保存到磁盘.

write.csv(iris, "iris.csv", row.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

现在问题.
参数row.names就像在write.csv指令中一样.
注意周围的反引号Sepal.Length.这是由于列名中的点字符.

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"
Run Code Online (Sandbox Code Playgroud)

最后清理.

unlink("iris.csv")
Run Code Online (Sandbox Code Playgroud)