2017-07-23 3 views
1

Je traite des ratios financiers et je voudrais construire une trame de données consistant en l'ordre en pourcentage d'une observation par rapport à une matrice en mouvement.Calcul du percentile de la matrice en mouvement

Supposons que j'ai la trame de données suivante

AAPL <- c(5,7,15,6,9,15,12,10,5,8) 
MSFT <- c(20,14,12,15,10,15,18,22,17,20) 
df <- data.frame (AAPL, MSFT) 

Ce que je voudrais faire est de créer une nouvelle trame de données comprenant l'ordre percentual d'une observation donnée sur la base des 4 dernières observations et l'observation lui-même.

Pour cet exercice simplifié, j'ai couru dans Excel et la nouvelle trame de données serait:

AAPL.new <- c(NA,NA,NA,NA,0.75,0.75,0.5,0.5,0,0.25) 
MSFT.new <- c(NA,NA,NA,NA,0,0.75,1,1,0.5,0.75) 
df.new <- c(AAPL.new, MSFT.new) 

Je suis begginer, en essayant de passer de travailler avec de petits échantillons dans Excel pour des échantillons plus importants en R Dans Excel la fonction pour cet exercice serait percentrank.

Quelle est la fonction équivalente dans R? J'ai essayé quantile() mais je ne sais pas comment le faire me donner un ordre en pourcentage d'une matrice en mouvement.

Nous vous remercions d'avance pour votre aide

Répondre

0

Nous pouvons écrire une fonction d'aide prank pour ce poste:

prank <- function(x, n){ 
    sapply(seq_along(x), function(i){ 
     if(i > n) sum(x[i] > x[(i-n):(i-1)])/n 
     else NA 
    }) 
} 

df.new <- as.data.frame(lapply(df, prank, n = 4)) 
# > df.new 
# AAPL MSFT 
# 1 NA NA 
# 2 NA NA 
# 3 NA NA 
# 4 NA NA 
# 5 0.75 0.00 
# 6 0.75 0.75 
# 7 0.50 1.00 
# 8 0.50 1.00 
# 9 0.00 0.50 
# 10 0.25 0.75