2016-02-05 1 views
2

Disons que j'ai un vecteur de prix:Ajout NA de un vecteur

foo <- c(102.25,102.87,102.25,100.87,103.44,103.87,103.00) 

Je veux obtenir le changement pour cent de x il y a des périodes et, par exemple, le stocker dans un autre vecteur que je vais appeler log_returns . Je ne peux pas lier les vecteurs foo et log_returns dans un data.frame car les vecteurs n'ont pas la même longueur. Je veux donc pouvoir ajouter NA à log_returns pour pouvoir les mettre dans un data.frame. Je me suis dit à un moyen d'ajouter un NA à la fin du vecteur:

log_returns <- append((diff(log(foo), lag = 1)),NA,after=length(foo)) 

Mais ça aide que si je regarde pour cent changement 1 période avant. Je cherche un moyen de remplir NA, peu importe le nombre de retards que je jette pour que le vecteur de changement de pourcentage soit égal en longueur au vecteur foo

Toute aide serait grandement appréciée!

+0

Vous pouvez stocker dans une liste à la place –

+4

la réponse ci-dessous est agréable, mais plus généralement si vous avez une liste de vecteurs de longueur inégale, vous pouvez faire quelque chose comme 'l <- list (1, 1: 2, 1: 5); data.frame (lapply (l, \ 'longueur <- \', max (longueurs (l)))) ' – rawr

Répondre

1

Vous pouvez utiliser votre propre modification de diff:

mydiff <- function(data, diff){ 
    c(diff(data, lag = diff), rep(NA, diff)) 
} 

mydiff(foo, 1) 
[1] 0.62 -0.62 -1.38 2.57 0.43 -0.87 NA 

data.frame(foo = foo, diff = mydiff(foo, 3)) 

    foo diff 
1 102.25 -1.38 
2 102.87 0.57 
3 102.25 1.62 
4 100.87 2.13 
5 103.44 NA 
6 103.87 NA 
7 103.00 NA 
+0

Excellente solution. Merci. – huesecon