为 R 中数据框中众多列的百分位排名创建新列

问题描述 投票:0回答:1

我有一个相当大的数据集(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)
r apply rank percentile
1个回答
0
投票

如果你想要 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)
© www.soinside.com 2019 - 2024. All rights reserved.