2016-04-27 4 views
1

Я хотел бы сделать циклический запрос в R, используя sqldf, чтобы выбрать всю переменную non-NULL X.1 с датой «11/12/2015» и в 9 утра. Пример:R sprintf в sqldf как

StartDate    X.1 
11/12/2015 09:14  A 
11/12/2015 09:36   
11/12/2015 09:54  A 

дата находится в переменной, которая генерируется из другого запроса

nullob<-0 
dayminnull<-as.numeric(sqldf("SELECT substr(Min(StartDate),1,03)as hari  from testes")) # this produce "11/12/2015" 
    for (i in 1 : 12){ 
    dday<-mdy(dayminnull)+days(i) #go to next day 
    sqlsql <- sprintf("SELECT count([X.1]) FROM testes where StartDate like '% \%s 09: %'", dday) 
    x[i]<-sqldf(sqlsql) 
    nullob<-nullob+x[i] 
} 

И это приходит с ошибкой: Ошибка в Sprintf ("SELECT COUNT ([Х.1]) из семенников WHERE StartDate как «%% сек 09%»»,:. непризнанной спецификация формата„%“ Пожалуйста HELLP заранее спасибо

+0

Предлагаем вам использовать fn $ вместо sprintf. См. Пример 5 на домашней странице sqldf: https://github.com/ggrothendieck/sqldf –

ответ

3

Это не супер ясно в документации, но % последующих ed %, то есть %%, является способом сообщить sprintf, чтобы использовать литературу %. Мы можем проверить это довольно легко:

sprintf("%% %s %%", "hi") 
[1] "% hi %" 

Для вашей строки запроса, это должно работать:

sprintf("SELECT count([X.1]) FROM testes where StartDate like '%% %s 09: %%'", dday) 

От ?sprintf:

Строка FMT содержит обычные символы, которые передаются до выходной строки, а также спецификации преобразования, которые работают на аргументы предоставлены через .... Разрешенные характеристики преобразования начинаются с % и заканчиваются одной из букв в , установленном aAdifeEgGosxX%. Эти буквы обозначают следующие типы:

... [Документация по aAdifeEgGosxX]

  • %: Буквенный % (ни один из дополнительных символов форматирования, приведенных ниже не допускается в данном случае).
+0

Работает! спасибо – Elbert

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