像sqldf中的R sprintf一样

时间:2016-04-27 06:11:50

标签: r printf sqldf

我想使用sqldf在R中进行循环查询,以选择日期为“11/12/2015”且在上午9点的所有非NULL X.1变量。示例:

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''%% s 09%'”,:   无法识别的格式规范'%' 请你好。提前谢谢你

1 个答案:

答案 0 :(得分:4)

文档中没有 super 清除,但是%后跟%,即%%,是告诉{{1}的方法使用文字sprintf。我们可以相当容易地测试这个:

%

对于您的查询字符串,这应该有效:

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

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

  

字符串fmt包含传递给的普通字符   输出字符串,以及操作的转换规范   通过?sprintf提供的论据。允许的转换   规范以...开头,以其中一个字母结尾   设置%。这些字母表示以下类型:

     

... [aAdifeEgGosxX%]

上的文档      
      
  • aAdifeEgGosxX:文字%(在这种情况下,不允许使用下面给出的额外格式字符)。
  •