从mysql数据库循环中获取数据

时间:2017-10-05 15:25:26

标签: mysql r list while-loop data-manipulation

我使用r:

成功从mysql数据库中获取数据
library(RMySQL)
mydb = dbConnect(MySQL(), user='user', password='pass', dbname='fib', host='myhost')
rs = dbSendQuery(mydb, 'SELECT distinct(DATE(date)) as date, open,close FROM stocksng WHERE symbol = "FIB7F";')
data <- fetch(rs, n=-1)
dbHasCompleted(rs)

所以现在我的对象是一个列表:

> print (typeof(data))
[1] "list"

每个元素都是元组(?),如日期(图表),开放(长),关闭(长)

好吧现在我的问题:我希望在关闭(x)和第二天打开(x + 1)之前得到百分比差异的向量,直到结束但我无法正确访问该项目!

示例:((打开)/关闭* 100)-100)

我试试:

for (item in data){
    print (item[2])
}

和所有可能的组合,如:

for (item in data){
  print (item[][2])
}

但无法访问正确的元素:!有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您在MySQL查询中遇到的问题比这更大,因为您没有指定ORDER BY子句。请考虑使用以下查询:

SELECT DISTINCT
    DATE(date) AS date,
    open,
    close
FROM stocksng
WHERE
    symbol = "FIB7F"
ORDER BY
    date

在这里,我们按日期对结果进行排序,这样就可以说出当前和下一次打开或关闭。现在有了适当的查询,如果你想获得当前收盘价和第二天开盘价之间的百分位差,你可以试试:

require(dplyr)
(lead(open, 1) / close*100) - 100

或使用基础R:

(open[2:(length(open)+1)] / close*100) - 100

答案 1 :(得分:0)

naif版本:

for (row in 1:nrow(data)){
  date <- unname (data[row,"date"])
  open <- unname (data[row+1,"open"])
  close <- unname (data[row,"close"])
  var <- abs((close/open*100)-100)
  print (var)
}