2017-10-05 1 views
1

I erfolgreich Daten von meinem mysql db unter Verwendung von R fetch: nun eine Liste Ich habe ein Objektr Abrufdaten aus mysql db loop

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) 

so:

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

jeweils Elemente ist ein Tupel (?) wie Datum (Diagramme), offen (lang), nah (lang)

ok nun mein Problem: Ich möchte einen Vektor prozentualen Unterschied zwischen nah (x) und nächsten Tag öffnen (x + 1) bis zum Ende ABER ich kann nicht richtig auf den Gegenstand zugreifen!

Beispiel: ((offen)/schließen * 100) -100)

Ich versuche:

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

und alle möglichen Kombinationen wie:

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

kann aber nicht nach rechts zugreifen Element :! jemand könnte helfen?

Antwort

1

Sie haben ein größeres Problem in Ihrer MySQL-Abfrage, weil Sie keine ORDER BY-Klausel angegeben haben. Erwägen Sie die folgende Abfrage:

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

Hier haben wir das Ergebnis mit Datum festgelegt bestellen, so dass es sinnvoll ist, zu sprechen von der aktuellen und nächsten öffnen oder schließen. Jetzt mit einer richtigen Abfrage in Kraft, wenn Sie die prozentuale Differenz zwischen dem aktuellen schließen und am nächsten Tag geöffnet Sie konnte erhalten wollte versuchen:

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

Oder mit Base R:

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

Danke für die Antwort! Ich werde nach dieser Bibliothek suchen! Aber gibt es eine naive Lösung, die zwischen den Zeilen der Ergebnisse rotiert? – egariM

+0

@egariM Ich aktualisierte mit einer Option, die für Basis R funktionieren sollte. –

0

naif Version:

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