2010-10-27 23 views
0

J'ai deux trames de données - un cours de clôture des actions classés par date (lignes) et symbole (colonnes):Créer un panneau de deux trames de données

> head(data.stocks) 
     date  A AAPL ABAT AB ABV 
1 2010-10-04 32.59 278.64 3.65 26.42 125.89 
2 2010-10-05 33.04 288.94 3.66 27.10 129.05 
3 2010-10-06 32.67 289.19 3.59 26.99 129.90 
4 2010-10-07 33.20 289.22 3.66 27.04 129.94 
5 2010-10-08 33.80 294.07 3.84 26.76 132.66 
6 2010-10-11 33.75 295.36 3.87 26.95 133.37 

L'autre trame de données a un intérêt ouvert (Oi) organisé par une ligne par symbole par jour:

> head(data.oi) 
     date symbol oi close 
1 2010-10-04  A 6  0 
2 2010-10-04  AA 104  0 
3 2010-10-04 AAPL 940  0 
4 2010-10-04  AB 0  0 
5 2010-10-04 ABAT 0  0 
6 2010-10-04 ABB 0  0 

Je voudrais ajouter une autre colonne à cette seconde trame de données afin que je finis avec une trame de données « du panneau » avec un symbole par jour par rangée avec oi et prix de clôture.

Je pensais que cette boucle fonctionnerait, mais je reçois l'erreur suivante:

> for (i in seq(length(data.oi$date))) { 
+ row <- which(data.stocks$date == data.oi$date[i]) 
+ col <- which(colnames(data.stocks) == data.oi$symbol[i]) 
+ data.oi$close[i] <- data.stocks[row, col] 
+ } 
Error in data.oi$close[i] <- data.stocks[row, col] : 
    replacement has length zero 

FWIW, il stocke la première valeur data.oi, échoue alors:

> head(data.oi) 
     date symbol oi close 
1 2010-10-04  A 6 32.59 
2 2010-10-04  AA 104 0.00 
3 2010-10-04 AAPL 940 0.00 
4 2010-10-04  AB 0 0.00 
5 2010-10-04 ABAT 0 0.00 
6 2010-10-04 ABB 0 0.00 

Merci! Je me sens comme reshape ou aggregate pourrait le faire, mais je ne peux pas comprendre comment fusionner ces deux.

Répondre

3

fondre dans le paquet de reshape2 et de fusion serait utile:

library(reshape2) 
merge(subset(data.oi,select=-close), 
     melt(d,id.vars="date",variable.name="symbol",value.name="close")) 
+0

Merci! Et j'avais ajouté le 'close' pour ma boucle folle, donc c'est encore plus facile! Melt est mon nouveau meilleur ami. –