2017-10-05 6 views
1

Je Fetch avec succès les données de mon mysql db en utilisant r:r récupération de données dans la boucle mysql db

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) 

maintenant j'ai un objet d'une liste:

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

chaque élément est un tuple (?) like date (charts), open (long), close (long)

ok bien maintenant mon problème: je veux obtenir un vecteur de différence entre les pourcentages (x) et le jour suivant (x + 1)) jusqu'à la fin MAIS je ne peux pas accéder correctement à l'article!

Exemple: ((ouvert)/fermer * 100) -100)

J'essaie:

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

et toutes les combinaisons possibles comme:

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

mais ne peut pas accéder à droite élément:! Quelqu'un pourrait-il aider?

Répondre

1

Vous avez un problème plus important dans votre requête MySQL, car vous n'avez pas spécifié de clause ORDER BY. Pensez à utiliser la requête suivante:

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

Ici, nous commander le jeu de résultats par date, de sorte qu'il est logique de parler du courant et à côté ouvert ou fermé. Maintenant, avec une requête appropriée en place si vous vouliez obtenir la différence percentile entre la clôture actuelle et le lendemain ouvert, vous pouvez essayer:

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

Ou en utilisant la base R:

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

Merci pour votre réponse! Je vais vérifier pour cette bibliothèque! Mais existe une solution plus naif en boucle entre les lignes de résultats? – egariM

+0

@egariM J'ai mis à jour avec une option qui devrait fonctionner pour la base R. –

0

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