Como posso adicionar uma nova variável ao quadro de dados, que será a classificação percentual de uma das variáveis? Eu posso fazer isso no Excel facilmente, mas eu realmente quero fazer isso no R.
obrigado
Dado um vetor de valores de dados brutos, uma função simples pode parecer
perc.rank <- function(x, xo) length(x[x <= xo])/length(x)*100
onde x0
é o valor para o qual queremos a classificação do percentil, dado o vetor x
, conforme sugerido nos R-blogueiros .
No entanto, pode ser facilmente vetorizado como
perc.rank <- function(x) trunc(rank(x))/length(x)
que tem a vantagem de não precisar passar cada valor. Então, aqui está um exemplo de uso:
my.df <- data.frame(x=rnorm(200))
my.df <- within(my.df, xr <- perc.rank(x))
percentrank
função do Excel , o que é bom (+1), pois o último fornece resultados "estranhos" (veja minha comparação ). 2. Eu não nomearia o quadro de dadosdf
, porquedf
é uma função R (a densidade da distribuição F, veja?df
).CTT
pacote há um tempo atrás. Não verifiquei no Excel porque não o tenho / uso. Sobre (2) Parece que sempre esqueço disso! Deixe-nos ir commy.*
(modo Perl) :-)trunc
necessário? Parece que a classificação sempre retornará um número inteiro de qualquer maneira.rank()
padrão é obter a média dos valores empatados (cf.ties.method = c("average",...)
).Se o data.frame original for chamado
dfr
e a variável de interesse for chamadamyvar
, você poderá usá-lodfr$myrank<-rank(dfr$myvar)
para classificações normais oudfr$myrank<-rank(dfr$myvar)/length(myvar)
percentuais.Ah bem. Se você realmente deseja da maneira Excel (pode não ser a solução mais simples, mas me diverti usando novas funções (para mim) e evitando loops):
então agora você pode usar
dfr$myrank<-percentilerank(dfr$myvar)
HTH.
fonte
length < length(dfr$myvar)
".Um problema com a resposta apresentada é que ela não funcionará corretamente quando você tiver NAs.
Nesse caso, outra possibilidade (inspirada na função de chl ♦) é:
Aqui, x é o vetor de valores e p.ile é o percentil por classificação. O percentil 2,5 pela classificação de coef.mat (arbitrário) pode ser calculado por:
ou como uma única função:
fonte