Je tente de convertir les horodatages dans les données boursières de l'API Google Finance en un format de date/heure plus utilisable.Conversion d'horodatages dans les données boursières Google Finance en date/heure correcte
Je l'ai utilisé data.table::fread
pour lire les données here:
fread(<url>)
datetime open high low close volume
1: a1497619800 154.230 154.2300 154.2300 154.2300 500
2: 1 153.720 154.3200 153.7000 154.2500 1085946
3: 2 153.510 153.8000 153.2000 153.7700 34882
4: 3 153.239 153.4800 153.1400 153.4800 24343
5: 4 153.250 153.3000 152.9676 153.2700 20212
Comme vous pouvez le voir, le format "datetime" est assez étrange. Le format est décrit dans ce link:
Les horodatages complets sont désignés par le «a» principal. Comme ceci:
a1092945600
. Le numéro après le 'a' est un horodatage Unix. [...]Les nombres sans «a» en tête sont des «intervalles». Ainsi, par exemple, la deuxième ligne de l'ensemble de données ci-dessous a un intervalle de 1. Vous pouvez multiplier ce nombre par notre taille [...] d'intervalle et l'ajouter au dernier horodatage Unix.
Dans mon cas, la "taille de l'intervalle" est de 300 secondes (5 minutes). Ce format est redémarré au début de chaque nouveau jour et donc essayer de le formater est assez difficile!
Je peux extraire les positions d'index du début de jour en utilisant grep
et en cherchant "a";
newDay <- grep(df$V1, pattern = "a")
Alors mon idée était de diviser la trame de données en morceaux en fonction des positions d'index étendre ensuite les temps unix à chaque jour séparément puis en les peignant de nouveau à un data.table, avant de le ranger.
data.table::split semble que ça va faire le travail, mais je ne sais pas comment lui fournir les pauses du jour pour diviser par des positions d'index, ou s'il y a une manière plus logique d'atteindre le même résultat sans avoir à le décomposer à chaque jour.
Merci.
Bonne solution! J'ai toujours pensé que vous deviez utiliser soit le format ou 'origine'. – Jaap