2017-01-20 1 views
0

Une simple requête renvoie 3 colonnes: instrument, la date, le prixR: SQL dans XTS pivotés objet

données comme suit:

library("xts") 
dta = data.frame(
    sample(x=c("a", "b", "c", "d", "e", "f"), size=367, replace=TRUE), 
    c(as.Date('2016-01-01') + 0:366), 
    c(0:366)) 
names(dta) <- c("instr", "date", "price") 

Ce que je veux est un pivotée XTS-objet qui se présente comme suit :

 
      "a" "b" "c" "d" "e" "f" 
2016-01-01 1  NA NA NA NA NA 
2016-01-02 NA 2  NA NA NA NA 
2016-01-03 3  NA NA NA NA NA 
2016-01-04 NA NA NA NA 4  NA 
... 

Je pensais à diviser les données en "instrument" -vectors:

list_of_instr_vectors <- split(dta, dta$instr) 

Transforme tous les data.frames de la liste en xts-objects et les fusionne.xts.

Peut-être que ce serait plus simple de tourner la data.frame dès le début dans un XTS:

xts_dta = as.xts(dta, order.by = dta$date) 

et faites pivoter les données ... mais comment?

Je suis sûr, il existe un moyen simple d'accomplir cette tâche commune ... mais comment?

Merci pour tout conseil! Marco

+0

double possible de [Comment remodeler les données de temps au format large?] (Http://stackoverflow.com/questions/5890584/how-to -reshape-data-from-long-to-wide-format) – nrussell

+0

Ceci n'est pas un doublon. Il pourrait être possible d'utiliser les méthodes dans le lien, mais puisque nous traitons avec la série xts ce ne sont pas vraiment les meilleures solutions. –

Répondre

0

Utilisez read.zoo avec l'argument split:

z <- read.zoo(dta, split = 1, index = 2) 
as.xts(z) 
+0

Wow! Si simple! La solution parfaite! Je vais jeter un oeil dans le zoo-package! Merci! – Marco