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 中,cumsum
和 duplicated
。
test$rank <- cumsum(!duplicated(test$column1))
确保 column1
在使用上述方法之前已排序,因为这两种方法都对顺序敏感。
我想创建一个等级变量
设置
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 中,cumsum
和 duplicated
。
test$rank <- cumsum(!duplicated(test$column1))
确保 column1
在使用上述方法之前已排序,因为这两种方法都对顺序敏感。