用平均值代替并列排名

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

我有以下数据框:

> x
  tags freq.Freq
1    a       740
2    b       722
3    c       722
4    d       541
5    e       525
6    f       525
7    g       525
8    h       326
9    i       296

x<- structure(list(tags = c("a", "b", "c", "d", "e", "f", "g", "h", "i"),
 freq.Freq = c(740L, 722L, 722L, 541L, 525L, 525L, 525L, 326L, 296L)), 
class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9"))

我想通过对freq.Freq中每个字母的排名来替换tags列。例如,a为1,d为4,i为9。无论如何,bcefg具有相同的等级。对于这些情况,我想用“并列”等级的平均值代替freq.Freq。这样,所需的输出为:

  tags freq.Freq
1    a       1
2    b       2.5
3    c       2.5
4    d       4
5    e       6
6    f       6
7    g       6
8    h       8
9    i       9

我的尝试:

library(dplyr)
min_rank(x$freq.Freq)

给出错误的结果:

9 7 7 6 3 3 3 2 1
r ranking
1个回答
0
投票
x %>% mutate(rank = match(tags, letters)) %>% group_by(freq.Freq) %>% mutate(rank = mean(rank)) %>% ungroup()

0
投票
我们可以只使用rank中的base R

rank(-x$freq.Freq)

© www.soinside.com 2019 - 2024. All rights reserved.