R ave有多个参数/按组排序并加权

  • 本文关键字:排序 加权 参数 ave r rank
  • 更新时间 :
  • 英文 :


我使用ave对R中数据集中组内的值进行排名。在示例中,"data"是一个包含原始、组和其他列的data.frame,例如

data <- data.frame(raw = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), group = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2), weight = c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2)))

的排名很好

data$rank <- ave(data$raw, data$group, FUN = function(x) {rank(x)})

我想通过应用权重来推广这种方法。权重在data.frame中作为另一列可用。加权排名是一个自定义函数,需要原始分数和权重向量。它可通过cNORM软件包获得,代码:https://github.com/WLenhard/cNORM/blob/master/R/utilities.R是否可以将ave与多个输入变量一起使用,例如

data$rank <- ave(x = data$raw, data$group, y = data$weights, FUN = function(x, y) {weighted.rank(x, weights = y)})

使得x和y都是基于分组变量的相应子集?我想像dplyr这样的软件包有这样的功能。有没有一种方法可以在不改变原始数据帧中行的顺序的情况下,也使用基R来实现这一点?

非常感谢!

编辑:Ronak Shah的解决方案完美地解决了这个问题。谢谢

您可以使用by作为基本R选项。

library(cNORM)
data$rank <- unlist(by(data, data$group, function(x) weighted.rank(x$raw, x$weight)))

dplyr中,您可以执行:

library(dplyr)
data %>% group_by(group) %>% mutate(rank  = weighted.rank(raw, weight))

最新更新