检查R中的排名顺序

时间:2015-06-20 19:14:29

标签: r

我想检查十分位数值的排名顺序。它应该按降序排列。这意味着第一个十分位数必须具有最大百分比分数。该列如下所示 -

pct.of.total
13.84
12.80
13.15
11.76
11.07
9.00
9.69
8.30
7.27
3.11

在这种情况下,第3个十分位数(13.15)得分高于第二个十分位数(12.80)。如果是这种情况,我希望R函数返回 - "Rank Ordering - Not satisfied at 3rd decile"。如果值按降序排列,我希望R函数返回 - "Rank Ordering - Satisfied"

我正在使用此代码 -

  message( "Rank Ordering Status : ", all(diff(final.gaint$pct.of.total) <= 0))

代码的问题 - 它不会返回按顺序存在中断的十进制级别,而且我也希望&#34;满意&#34;代替&#34; TRUE&#34;。

1 个答案:

答案 0 :(得分:1)

n <- sapply(which(diff(final.gain$pct.of.total) > 0), getOrd)
if(all(diff(final.gain$pct.of.total) <= 0)) {
  return("Rank Ordering - Satisfied")
} else {
  sprintf("Rank Ordering - Not satisfied at %s decile", n)
}

来自此网站here的额外奖励,用于格式化序号的功能。

getOrd <- function(num) {
  result <- ""
  if (!(num %% 100 %in% c(11, 12, 13))) {
    result <- switch(as.character(num %% 10), 
                     "1" = {paste0(num, "st")}, 
                     "2" = {paste0(num, "nd")},
                     "3" = {paste0(num, "rd")},
                     paste0(num, "th"))
  } else {
    result <- paste0(num, "th")
  }
  result
}