【问题标题】:r fetch data from mysql db loopr 从 mysql db 循环中获取数据
【发布时间】:2018-03-17 07:03:45
【问题描述】:

我使用 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])
}

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 感谢您的回复!我会检查那个图书馆!但是是否存在更简单的解决方案在结果行之间循环?
    • @egariM 我更新了一个适用于基础 R 的选项。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多