2016-04-27 10 views
1

Ich möchte eine Schleifenabfrage in R mit sqldf, um alle nicht-NULL X.1 Variable mit Datum "11/12/2015" und um 9 Uhr. Beispiel:R sprintf in sqldfs wie

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

Das Datum ist in der Variablen, die von anderen Abfrage generiert

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] 
} 

Und es kommt mit Fehler: Fehler in sprintf ("SELECT count ([X.1]) FROM Hoden WHERE Startdate wie '09% s %%'“,.: unerkannt Formatangabe '%' Bitte hellp danken Ihnen im Voraus

+0

Ich schlage vor, Sie verwenden Fn $ anstelle von Sprintf. Siehe Beispiel 5 auf der sqldf-Homepage: https://github.com/ggrothendieck/sqldf –

Antwort

3

Es ist nicht Super klar in der Dokumentation, sondern ein % Folge Ed von einem %, das ist %%, ist der Weg zu sprintf zu sagen, ein Literal % zu verwenden. Wir können dies testen, ziemlich leicht:

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

Für Ihre Abfrage-String, sollte diese Arbeit:

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

Von ?sprintf:

Der String fmt normale Zeichen enthält, die werden an die Ausgabezeichenfolge übergeben, und auch Konvertierungsspezifikationen, die aufarbeitendie Argumente zur Verfügung gestellt durch .... Die erlaubte Konvertierung Spezifikationen beginnen mit einem % und enden mit einem der Buchstaben in Set aAdifeEgGosxX%. Diese Buchstaben bezeichnen die folgenden Typen:

... [Dokumentation auf aAdifeEgGosxX]

  • %: Wörtliche % (keine der zusätzlichen Formatierungszeichen unten angegeben sind, in diesem Fall zulässig).
+0

Es funktioniert! Vielen Dank – Elbert