2017-02-15 2 views
0

J'ai une liste de symboles dans un fichier csv et je veux l'écran pour ceux avec le prix de clôture supérieur à 5.Comment utiliser Cl() avec du caractère?

J'ai déjà couru getSymbols pour tous les éléments dans le fichier csv.

Mon test est en erreur ici. Je pense que c'est parce que Cl() n'accepte pas les caractères comme arguments. Comment puis-je convertir un caractère en xts?

> library(quantmod) 

> passingset 
     V1 
1  AAB 
2 AAR-UN 
3  AAV 
4  ABT 
5  ABX 
     (...) 

> class(passingset) 
[1] "data.frame" 
> class(passingset$V1) 
[1] "character" 


> #Remove closing price < 5 
> for (i in 1:nrow(passingset)){ 
+ company <- passingset$V1[i] 
+ if(Cl(company)[length(Cl(company))] < 5){ 
+  passingset <- passingset[!(passingset$V1 == company),, drop = FALSE] 
+ } else 
+  i = i + 1 
+ 
+ rm(company) 
+ } 
**Error in Cl(company) : 
    subscript out of bounds: no column name containing "Close"** 

Répondre

1

Pas besoin de boucler! En supposant que vous avez lu la série de prix avec getSymbols comme vous l'avez mentionné ci-dessus:

# an example set of tickers: 
pasingset <- data.frame(V1=c('CWB','EEM','VTI','NAK','GIG'),stringsAsFactors = F) 

# this gets you the last closings of your tickers 
lastClose <- sapply(pasingset$V1,function(x) xts::last(Cl(get(x)))) 

# shows the tickers which have a close > 5 
pasingset$V1[which(lastClose > 5)] 
[1] "CWB" "EEM" "VTI" 
+0

@hvollmerier merci beaucoup! Lorsque j'essaie la seconde ligne de votre code, cela me donne toujours "Erreur dans get (x): premier argument invalide". Avez-vous déjà rencontré ça? – Montosh123

+0

@hotterthanmath, comme la fonction 'last' est utilisée par plusieurs paquets, je ne peux que supposer que d'autres paquets peuvent être chargés en utilisant une fonction du même nom. Pour être sûr d'utiliser la fonction du 'xts-package', écrivez' xts :: last' au lieu de 'last 'comme j'ai édité. Un autre problème possible pourrait être que votre fichier csv n'a pas les mêmes noms de structure/colonne qu'un fichier téléchargé de yahoo. Pour vérifier, téléchargez exactement les mêmes tickers que dans mon exemple avec 'getSymbols' de yahoo. Vous ne devriez pas voir une erreur. – hvollmeier