R语言中为秩频率数据框生成mean rank(平均秩)列的实现方法
你要实现的平均秩列可以直接通过rank()函数指定结处理规则实现,无需额外分组计算,代码修改如下:
library(tidyverse) library(tidytext) dt <-data.frame(frequency=c(64,58,54,32,29,29,25,17,17,15,12,12,10)) dt %>% arrange(desc(frequency)) %>% mutate( rank = row_number(), mean_rank = rank(-frequency, ties.method = "average") )
这里rank()函数的ties.method = "average"参数会自动将相同frequency的观测值的秩取平均,对frequency取负是为了让排序逻辑和你原代码的降序排列保持一致,计算结果完全符合预期的平均秩效果。
如果你偏好更直观的分组逻辑,也可以用分组取平均的写法实现:
dt %>% arrange(desc(frequency)) %>% mutate(rank = row_number()) %>% group_by(frequency) %>% mutate(mean_rank = mean(rank)) %>% ungroup()
内容的提问来源于stack exchange,提问作者AdIan
相关产品推荐
相关产品推荐

