使用 sqldf 中的 read.csv.sql 读取某些列(如果存在)

Read certain columns if exist using read.csv.sql from sqldf

我有非常大的 csv 文件 (2.3 GB)。我只想阅读某些可能存在或不存在的专栏。

我正在使用此处建议的以下代码 Only read limited number of columns

library(sqldf) 
loc <- read.csv.sql("data.csv",
                    sql = "select locID, City, CRESTA, Latitude, Longitude from file",
                    sep = ",")

我该如何处理这种情况,例如列 "City" 不在 csv 中?

这会找出哪些列可用,将它们的名称与所需列的名称相交,然后只读取这些列。

library(sqldf)

nms_wanted <- c("locID", "City", "CRESTA", "Latitude", "Longitude")
nms_avail <- names(read.csv("data.csv", nrows = 0))
nms <- intersect(nms_avail, nms_wanted)
fn$read.csv.sql("data.csv", "select `toString(nms)` from file")