2017-01-25 1 views
0

Existe-t-il un moyen simple de renvoyer une liste de lignes manquantes dans un xts? Ci-dessous produit un xts et pour cet exemple il manque intentionnellement 2 lignes. Plus loin, lorsqu'on a la liste (de lignes manquantes), est-il possible de calculer le% de lignes manquantes (par exemple 2 lignes manquent où le total devrait être 100 lignes = 2% ou des lignes manquantes).xts - Retourne une liste de lignes manquantes et calcule% de lignes manquantes

# load dependent packages 
library(xts) 

# create a set of test data to be used 
d <- as.POSIXct(c("2017/01/01 09:00:00", "2017/01/01 09:02:00", 
       "2017/01/01 09:02:00", "2017/01/01 09:05:00")) 
o = c(98.00, 97.67, 98.00, 98.10) # for "open" data 
h = c(99.71, 98.97, 99.71, 99.41) # for "high" data 
l = c(96.81, 96.86, 96.81, 97.70) # for "low" data 
c = c(97.67, 98.67, 97.67, 98.83) # for "close" data 
v = c(1000, 22000, 1000, 50000) # for "volume" data 
a = c(1000, 22000, 1000, 50000) # for "adjusted" data 

# create a dataframe 
mydf1 <- data.frame("date" = d, "open" = o, "high" = h, "low" = l, 
       "close" = c, "volume" = v, "adjusted" = a) 

# create an xts based on dataframe mydf1 
myxts1 <- xts(mydf1[,-1], order.by = mydf1$date) 

Répondre

1

Voici une proposition pour cette tâche.

Calculer un vecteur, y compris tous les temps en fonction des temps présents dans l'objet xts:

all_times <- seq(min(time(myxts1)), max(time(myxts1)), 
       by = min(diff(time(myxts1)))) 

Créer vecteur comprenant fois manquants:

missing_times <- all_times[!all_times %in% time(myxts1)] 

missing_times 
# [1] "2017-01-01 09:01:00 CET" "2017-01-01 09:04:00 CET" 

Pourcentage de fois manquants:

length(missing_times)/length(all_times) * 100 
# [1] 33.33333 
+0

Cela fonctionne vraiment bien avec les données xts ci-dessus. L'utilisation de données OHLC téléchargées réelles au format xts donne parfois cette erreur: Erreur dans seq.int (0, to0 - from, by): invalide '(à-partir de)/par' in 'seq'. Il semble que ce soit la partie de ligne "all_times": by = min (diff (temps (xts10)) – Toolbox

+0

@Toolbox L'exemple doit ressembler le plus possible aux caractéristiques des données d'origine –

+0

Pour une raison inconnue, la solution fonctionne jusqu'à 22 lignes xts, ayant 23 lignes xts produit l'erreur ci-dessus – Toolbox