使用SQLDF或read.csv.sql选择每个第N列

时间:2013-03-12 22:25:29

标签: sql r sqldf

我是使用SQL语句的新手,并且在使用它们从大表中选择所需的列并将它们拉入R时遇到一些麻烦。

我想获取一个csv文件并将所选列读入r,特别是每9和10列。在R中,类似于:

read.csv.sql("myfile.csv", sql(select * from file [EVERY 9th and 10th COLUMN])

我对互联网的拖网建议选择每一行可以使用一个像这样的MOD的SQL语句来完成(如果我错了请纠正我):

"SELECT *
        FROM   file
        WHERE  (ROWID,0) IN (SELECT ROWID, MOD(ROWNUM,9) OR MOD(ROWNUM,10)"

有没有办法让这个列适用于列?提前致谢。

1 个答案:

答案 0 :(得分:2)

read.csv read.csv就足够了:

# determine number of columns
DF1 <- read.csv(myfile, nrows = 1)
nc <- ncol(DF1)

# create a list nc long where unwanted columns are NULL and wanted are NA
colClasses <- rep(rep(list("NULL", NA), c(8, 2)), length = nc)

# read in
DF <- read.csv(myfile, colClasses = colClasses)

sqldf 要使用sqldf,请将最后一行替换为:

nms <- names(DF1)
vars <- toString(nms[is.na(colClasses)])
DF <- fn$read.csv.sql(myfile, "select $vars from file")

更新:切换到read.csv.sql

更新2:更正。