我有一个相当大的数据集(149 个变量的 4000 个观测值),我想查看其中许多变量的百分位排名。我已经能够使用以下代码成功生成百分位数排名(我相信)忽略 NA 值:
prank <- function(x){
r <- rank(x)/sum(!is.na(x))*100
r[is.na(x)]<-NA
r
}
我的问题是如何自动将此功能应用于我感兴趣的列,返回一个包含排名的新列?我试过这个:
y <- data.frame(x, t(apply(-x,1,prank)))
但这似乎将所有内容组合在一起并建立了等级。我基本上希望能够在 ~100 个不同的列上执行以下操作:
y$V5.pr <- prank(x$V5)
如果你想要 0-100 区间的百分位数排名,考虑在 r 的分母和分母上都减去 1:
prank <- function(x){
r <- (rank(x)-1)/(sum(!is.na(x))-1)*100
r[is.na(x)]<-NA
return(r)
}
以 x 作为数据框的另一种可能性,其中包含数字变量以变异为百分位等级:
y <- apply(x, 2, prank)
或添加命名列的选项:
x[ , paste0(names(x),".pr")] <- apply(x, 2, prank)