¿Cómo puedo agregar una nueva variable en el marco de datos que será el rango percentil de una de las variables? Puedo hacer esto en Excel fácilmente, pero realmente quiero hacerlo en R.
Gracias
¿Cómo puedo agregar una nueva variable en el marco de datos que será el rango percentil de una de las variables? Puedo hacer esto en Excel fácilmente, pero realmente quiero hacerlo en R.
Gracias
Si su data.frame original se llama dfr
y la variable de interés se llama myvar
, puede usar dfr$myrank<-rank(dfr$myvar)
para rangos normales, o dfr$myrank<-rank(dfr$myvar)/length(myvar)
para rangos percentiles.
Oh bien. Si realmente lo desea al estilo de Excel (puede que no sea la solución más simple, pero me divertí un poco usando funciones nuevas (para mí) y evitando bucles):
percentilerank<-function(x){
rx<-rle(sort(x))
smaller<-cumsum(c(0, rx$lengths))[seq(length(rx$lengths))]
larger<-rev(cumsum(c(0, rev(rx$lengths))))[-1]
rxpr<-smaller/(smaller+larger)
rxpr[match(x, rx$values)]
}
así que ahora puedes usar dfr$myrank<-percentilerank(dfr$myvar)
HH.
Un problema con la respuesta presentada es que no funcionará correctamente cuando tenga NA.
En este caso, otra posibilidad (inspirada en la función de chl) es:
perc.rank <- function(x) trunc(rank(x,na.last = NA))/sum(!is.na(x))
quant <- function (x, p.ile) {
x[which.min(x = abs(perc.rank(x-(p.ile/100))))]
}
Aquí, x es el vector de valores y p.ile es el percentil por rango. El percentil 2,5 por rango de coef.mat (arbitrario) puede calcularse mediante:
quant(coef.mat[,3], 2.5)
[1] 0.00025
o como una sola función:
quant <- function (x, p.ile) {
perc.rank <- trunc(rank(x,na.last = NA))/sum(!is.na(x))
x = na.omit(x)
x[which.min(x = abs(perc.rank(x-(p.ile/100))))]
}
I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.