2012-10-11 5 views
0

Je tente d'effectuer une étude sur le regroupement des points hauts/bas en fonction du temps. J'ai réussi à réaliser ce qui précède en utilisant to.daily sur les données intraday et fusionner les deux en utilisant:Cluster haut/bas intrajournalier

intraday.merge <- merge(intraday,daily) 
intraday.merge <- na.locf(intraday.merge) 
intraday.merge <- intraday.merge["T08:30:00/T16:30:00"] # remove record at 00:00:00 

Ensuite, j'ai essayé d'obtenir les enregistrements où le haut == daily.high/bas == daily.low en utilisant:

intradayhi <- test[test$High == test$Daily.High] 
intradaylo <- test[test$Low == test$Daily.Low] 

les données résultantes semblable au suivant:

     Open High Low Close Volume Daily.Open Daily.High Daily.Low Daily.Close Daily.Volume 
2012-06-19 08:45:00 258.9 259.1 258.5 258.7 1424  258.9  259.1  257.7  258.7  31523 
2012-06-20 13:30:00 260.8 260.9 260.6 260.6 1616  260.4  260.9  259.2  260.8  35358 
2012-06-21 08:40:00 260.7 260.8 260.4 260.5 493  260.7  260.8  257.4  258.3  31360 
2012-06-22 12:10:00 255.9 256.2 255.9 256.1 626  254.5  256.2  253.9  255.3  50515 
2012-06-22 12:15:00 256.1 256.2 255.9 255.9 779  254.5  256.2  253.9  255.3  50515 
2012-06-25 11:55:00 254.5 254.7 254.4 254.6 1589  253.8  254.7  251.5  253.9  65621 
2012-06-26 08:45:00 253.4 254.2 253.2 253.7 5849  253.8  254.2  252.4  253.1  70635 
2012-06-27 11:25:00 255.6 256.0 255.5 255.9 973  251.8  256.0  251.8  255.2  53335 
2012-06-28 09:00:00 257.0 257.3 256.9 257.1 601  255.3  257.3  255.0  255.1  23978 
2012-06-29 13:45:00 253.0 253.4 253.0 253.4 451  247.3  253.4  246.9  253.4  52539 

Il y a des résultats dupliquées en utilisant le sous-ensemble, comment puis-je obtenir que le premier enregistrement de la journée? Je serais alors en mesure de tracer le nombre d'enregistrements pour les périodes de la journée.

Y a-t-il d'autres méthodes pour obtenir les résultats que je veux? Merci d'avance.

Edit:

sortie de l'échantillon doit ressembler à ceci, compte pourrait être soit le 1er résultat pour jour ou agrégée (occurrence plus de 1 en ce jour):

Time  Count 
08:40:00 60 
08:45:00 54 
08:50:00 60 
... 
14:00:00 20 
14:05:00 12 
14:10:00 30 
+0

Cela peut être utile si vous montrez à quoi ressemble votre solution idéale. Dans l'échantillon de données que vous donnez, est-ce que vous désirez vous débarrasser de la rangée «2012-06-22 12:15:00»? Ou pour le fusionner avec la ligne "2012-06-22 12:10:00"? Ou autre chose? –

Répondre

0

Vous pouvez obtenir la première observation de chaque jour via:

y <- apply.daily(x, first) 

Ensuite, vous pouvez simplement agréger le nombre en fonction des heures et minutes:

z <- aggregate(1:NROW(y), by=list(Time=format(index(y),"%H:%M")), sum) 
+0

Merci pour votre réponse, bat sûrement ma solution: 'lo <- transformer (as.POSIXlt (index (intradaylo)) $ heure * 60 + as.POSIXlt (index (intradaylo)) $ min, foo = 1)' Ensuite, regrouper le résultat avant de tracer. Toutefois, j'ai introduit une nouvelle colonne en procédant comme suit car je n'obtiens pas la somme des lignes en utilisant la fonction d'agrégation ci-dessus: 'lo $ Count <- 1 lo <- aggregate (lo $ Count, par = liste (temps = format (index (lo), "% H:% M")), somme) ' – mrkre