Соответствующие даты в sqldf - PullRequest
1 голос
/ 22 августа 2011

У меня есть фрейм данных со складскими данными (дата, символ, максимум, минимум, открытый, закрытый, объем). Используя и mysql, sqldf и rmysql, у меня есть список уникальных дат и уникальных биржевых символов. Что мне сейчас нужно, так это перебрать данные и найти закрытие на две указанные даты. Например:

  • stkData содержит (дата, символ, максимум, минимум, открытие, закрытие, объем)
  • dates содержит уникальные даты
  • symbol содержит уникальные символы

Я хочу просмотреть списки в выражении sqldf следующим образом:

'select stkData$close from stkData where symbol = symbol[k] and date = dates[j]'

k и j будут зацикленными числами, но моя проблема в деталях symbol[k] и dates[j].
sqldf не будет их правильно читать (или я не могу правильно написать код). Я пытался as.Date, as.character без удачи. Я получаю следующее сообщение об ошибке:

Error in sqliteExecStatement(con, statement, bind.data) : 
RS-DBI driver: (error in statement: near "[4,]": syntax error)

Ответы [ 3 ]

2 голосов
/ 22 августа 2011

К сожалению, вы довольно далеки от синтаксиса sqldf.Вы не можете использовать нотации $ или [] в вызовах sqldf, потому что они оба являются синтаксисом R, а не синтаксисом SQL.Это совершенно отдельный язык.Происходит то, что sqldf берет ваш фрейм данных, импортирует его в SQLite3, выполняет запрос SQL, который вы передаете к результирующей таблице, а затем импортируете результирующий набор обратно в R как фрейм данных.В SQL нет функциональных возможностей R.

Мне не ясно, что вы пытаетесь сделать, но если вы хотите выполнить несколько запросов в цикле, вы, вероятно, захотите построить SQL-запрос какстрока с использованием функции R paste(), так что когда она дойдет до SQLite3, это будут просто статические значения, в которых у вас есть symbol[k] и dates[j].

.после, но в цикле для j и k:

sqldf(paste('select close from stkData where symbol = ', symbol[k],
            ' and date = ', dates[j]))
0 голосов
/ 05 июня 2015

Предисловие sqldf с fn$, как показано, и затем строки внутри обратных кавычек будут заменены результатом их выполнения в R, а строки в переменной $ form будут заменены содержимым этой переменной (при условии, что имя переменнойсодержит только символы слова).Обратите внимание, что SQL требует, чтобы символьные константы были заключены в кавычки, поэтому обязательно заключайте в кавычки или переменную $ кавычки:

fn$sqldf("select close from stkData 
   where symbol = '`symbol[k]`' and 
         date = '`dates[j]`' ")

Чтобы использовать синтаксис $ variable, попробуйте следующее:

mysymbol <- symbol[k]
mydate <- dates[j]
fn$sqldf("select close from stkData 
   where symbol = '$mysymbol' and 
         date = '$mydate' ")

Также см. Пример 5 на странице sqldf github: https://github.com/ggrothendieck/sqldf

0 голосов
/ 23 августа 2011

Вам может понадобиться создать оператор select в виде строки с вставкой, прежде чем он будет передан вашему вызывающему SQL. Что-то вроде:

combo_kj <- expand.grid(ksym=symbol[1:k], jdates=dates[1:j])

SQLcalls <- paste('select close from stkData where symbol = ',
                   combo_kj$ksym,
                   ' and date = '
                   combo_kj$jdates,
                   sep="")

А затем зацикливайтесь на вызовах SQL с любым кодом, который вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...