R sprintf в sqldf, как

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

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([X.1]) FROM testes WHERE StartDate like '%%s 09%'", : спецификация нераспознанного формата '%' Пожалуйста, помогите. Заранее спасибо


person Elbert    schedule 27.04.2016    source источник
comment
Предложите использовать fn$ вместо sprintf. См. пример 5 на домашней странице sqldf: github.com/ggrothendieck/sqldf   -  person G. Grothendieck    schedule 27.04.2016


Ответы (1)


В документации это не супер ясно, но %, за которым следует %, то есть %%, — это способ указать sprintf использовать литерал %. Мы можем проверить это довольно легко:

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

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

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

От ?sprintf:

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

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

  • %: литерал % (в этом случае ни один из дополнительных символов форматирования, указанных ниже, не разрешен).
person Gregor Thomas    schedule 27.04.2016