Comment puis-je ajouter une nouvelle variable dans le bloc de données qui sera le rang centile de l'une des variables? Je peux le faire facilement dans Excel, mais je veux vraiment le faire dans R.
Merci
Étant donné un vecteur de valeurs de données brutes, une fonction simple pourrait ressembler à
perc.rank <- function(x, xo) length(x[x <= xo])/length(x)*100
où x0
est la valeur pour laquelle nous voulons le rang centile, étant donné le vecteur x
, comme suggéré sur R-bloggers .
Cependant, il pourrait facilement être vectorisé comme
perc.rank <- function(x) trunc(rank(x))/length(x)
ce qui a l'avantage de ne pas avoir à passer chaque valeur. Voici donc un exemple d'utilisation:
my.df <- data.frame(x=rnorm(200))
my.df <- within(my.df, xr <- perc.rank(x))
percentrank
n'imite pas la fonction d'Excel , ce qui est bien (+1) car ce dernier donne des résultats "étranges" (voir ma comparaison ). 2. Je ne nommerais pas le bloc de donnéesdf
, car ildf
s'agit d'une fonction R (la densité de la distribution F, voir?df
).CTT
paquet il y a quelque temps. Je n'ai pas vérifié contre Excel parce que je ne l'ai pas / ne l'utilise pas. À propos de (2) Je semble toujours oublier cela! C'estmy.*
trunc
nécessaire? Il semble que le rang renvoie toujours un entier de toute façon.rank()
défaut est de prendre la moyenne des valeurs liées (cf.ties.method = c("average",...)
).Si votre data.frame d'origine est appelée
dfr
et que la variable d'intérêt est appeléemyvar
, vous pouvez l'utiliserdfr$myrank<-rank(dfr$myvar)
pour les classements normaux oudfr$myrank<-rank(dfr$myvar)/length(myvar)
pour les classements centiles.Tant pis. Si vous le voulez vraiment à la manière Excel (ce n'est peut-être pas la solution la plus simple, mais je me suis amusé à utiliser de nouvelles fonctions (pour moi) et à éviter les boucles):
maintenant vous pouvez utiliser
dfr$myrank<-percentilerank(dfr$myvar)
HTH.
la source
length < length(dfr$myvar)
".Un problème avec la réponse présentée est qu'elle ne fonctionnera pas correctement lorsque vous avez des NA.
Dans ce cas, une autre possibilité (inspirée de la fonction de chl ♦) est:
Ici, x est le vecteur de valeurs et p.ile est le centile par rang. 2,5 percentile par rang de (arbitraire) coef.mat peut être calculé par:
ou comme une seule fonction:
la source