2013-03-12 2 views
1

Я довольно новичок в использовании операторов SQL, и у меня есть небольшая проблема с их использованием, чтобы выбрать нужные столбцы из большой таблицы и потянуть их в R.выбор каждого столбца N в использовании SQLDF или read.csv.sql

Я хочу взять файл csv и прочитать выбранные столбцы в r, в частности, каждый 9-й и 10-й столбцы. В R, что-то вроде:

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

Мой трал из Интернета предполагает, что при выборе каждого п-й строки можно сделать с помощью оператора SQL с помощью MOD-то вроде этого (пожалуйста, поправьте меня, если я ошибаюсь):

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

Есть ли способ сделать эту работу для столбцов? Заранее спасибо.

+0

Какие СУБД вы используете? Ваше название говорит n-й столбец, и вы задаете вопрос n-й строке - какой из них? –

+0

@PreetSangha С ** sqldf ** он должен использовать SQLite в качестве задней части. – joran

+0

Спасибо, что я этого не знал. –

ответ

2

read.csvread.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") 

UPDATE: переключился на read.csv .sql

ОБНОВЛЕНИЕ 2: исправление.

+0

Большое спасибо! Метод read.csv отлично работает для небольших тестовых файлов, но я не решаюсь использовать его в своем файле размером 251 МБ. Read.csv наложил havok на мой бедный 32-разрядный R с большими файлами раньше. Будет ли изменение colClasses, количество операций значительно сокращено? Для функции sqldf я немного незнакомый с синтаксисом. Как я могу указать свой файл в fn $ sqldf? Должен ли файл .csv быть предварительно загружен в базу данных? Если бы я хотел использовать read.csv.sql для сохранения шага, можете ли вы сохранить тот же синтаксис SQL? Т.е. read.csv.sql (myfile, sql = "select $ vars from file" –

+0

Переключились на read.csv.sql. Возможно, вам придется использовать другие аргументы для read.csv.sql, а также в зависимости от того, какой точный формат из вашего файла. See? read.csv.sql. Что касается производительности, я думаю, вам действительно нужно попробовать его на своих данных, чтобы почувствовать его. Попробуйте его с подмножеством строк 1 МБ, скажем. –

+0

Чтение .csv.sql дает мне следующую ошибку: «Ошибка в sqliteExecStatement (con, statement, bind.data): Драйвер RS-DBI: (ошибка в инструкции: рядом с« .1 »: синтаксическая ошибка)». на всех знакомых? Он отлично работает (без удаления столбца), когда оператор SQL остается включенным, а colClasses работает с методом read.csv, поэтому он кажется синтаксисом SQL-статута, который отбрасывает его. идеи? Еще раз спасибо за вашу помощь, очень ценю. –

Смежные вопросы