在R中为数据框中多列的百分位数秩创建新列

sbdsn5lh  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(143)

我有一个相当大的数据集(4000个obs,149个变量),我想看看这些变量中的许多变量的百分位数排名。我已经能够成功地生成百分位数排名(我相信),忽略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)
bzzcjhmw

bzzcjhmw1#

如果您希望百分比等级在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作为具有数值变量的 Dataframe ,以变异为百分位数排名:

y <- apply(x, 2, prank)

或添加了命名列的选项:

x[ , paste0(names(x),".pr")] <- apply(x, 2, prank)

相关问题