我有一个数据框架与股票数据(日期,符号,高,低,打开,关闭,音量)。使用R和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)发布于 2011-08-22 19:43:38
不幸的是,就sqldf的语法而言,您还相距甚远。不能在sqldf调用中使用$或[]符号,因为它们都是R语法,而不是SQL语法。这是一种完全不同的语言。所发生的情况是sqldf获取数据框架,将其导入SQLite3,执行针对结果表提供的SQL查询,然后将结果集作为数据框架导入R。SQL中没有R功能可用。
我不清楚您想要做什么,但是如果您想在一个循环中运行多个查询,您可能希望使用R函数paste()将这个SQL查询作为一个字符串来构造,这样当它到达SQLite3时,它将只是静态值,而您现在有symbol[k]和dates[j]。
因此,您将得到类似于以下内容的内容,但将其封装在j和k的循环中
sqldf(paste('select close from stkData where symbol = ', symbol[k],
' and date = ', dates[j]))发布于 2011-08-22 20:48:53
在将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="")然后用您正在使用的任何代码在SQLcalls上循环。
发布于 2015-06-05 14:17:15
如图所示,序言sqldf与fn$,然后背板中的字符串将被在R中运行它们的结果所取代,而表单$variable的字符串将被该变量的内容所取代(前提是变量名仅包含单词字符)。请注意,SQL要求将字符常量放在引号中,因此请确保用引号包围回退或$variable:
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' ")还请参见sqldf页面上的示例5:https://github.com/ggrothendieck/sqldf
https://stackoverflow.com/questions/7152119
复制相似问题