R 中的排名不是从 1 开始

Rank doesn't start at 1 in R

我想创建一个等级变量

设置

test <- data.frame(column1 = c(5,5,5,6,6,7,7,7,8))
test$rank <- rank(test)

 test
  column1 rank
1       5  2.0
2       5  2.0
3       5  2.0
4       6  4.5
5       6  4.5
6       7  7.0
7       7  7.0
8       7  7.0
9       8  9.0

我要的答案是1,1,1,2,2,3,3,3,4。

您需要使用 dense_rank。

test <- data.frame(column1 = c(5,5,5,6,6,7,7,7,8))
test$rank <- dplyr::dense_rank(test$column1)

window 排序函数的工作

test %>% rename(input = column1) %>% 
  mutate(row_num_output = row_number(input),
                rank_output = min_rank(input),
                dense_rank_output = dense_rank(input))

输出 更好地理解您的输入

一个 data.table 解决方案,使用 frank()(快速排名)函数,该函数具有 ties 方法 "dense"。

library(data.table)
test <- data.table(column1 = c(5,5,5,6,6,7,7,7,8))
test[, rank := frank(column1, ties.method = "dense")]

或者使用 match

的基础 R 解决方案
test$rank <- match(test$column1, unique(test$column1[order(test$column1)]))

您可以通过多种方式执行此操作:

dplyr中,可以使用group_indices

test$rank <- dplyr::group_indices(test, column1)

或在基数 R 中,cumsumduplicated

test$rank <- cumsum(!duplicated(test$column1))

确保 column1 在使用上述方法之前已排序,因为这两种方法都对顺序敏感。