【问题标题】:R: ranking by a factor and by a groupR:按因素和组排名
【发布时间】:2018-05-24 01:23:20
【问题描述】:

希望任何人都知道 R 中的简单解决方案。

我有一个包含多个变量的数据集“temp”:

Department  Product  Var1 
  D1         P1       3
  D1         P2       6
  D2         P1       4
  D3         P2       2
  D3         P3       3

所以Var1 是数字。

已经为每个部门内的每个产品计算过。

现在,我正在尝试按每个部门组中的产品进行排名。 按产品获得排名很容易:

ranked<-transform(temp, rank_Var1= ave(Var1,  FUN = function(x) rank(x, ties.method = "average")))

但是,我无法找到一个条件,即现在需要在每个部门内计算排名 Var1。

非常感谢任何建议。 谢谢

【问题讨论】:

  • 我会使用dplyr 包。也许temp %&gt;% group_by(Department, Product) %&gt;% mutate(ranked = rank(Var1)

标签: r ranking


【解决方案1】:

我们可以使用data.table

library(data.table)
setDT(temp)[,rank_Var1 := rank(Var1, ties.method = "average"),  by= .(Department, Product)]

如果我们使用ave,在第一个参数之后,我们指定分组变量,

transform(temp, rank_Var1= ave(Var1, Department, Product, 
                 FUN = function(x) rank(x, ties.method = "average")))

【讨论】:

    【解决方案2】:

    谢谢! 我找到了答案:)

    temp2

    【讨论】:

      【解决方案3】:

      按照你想要的顺序排列你的因素:

      temp$Product<-factor(temp$Product, levels=c("P1", "P2", "P3"))
      temp$Department<-factor(temp$Department, levels=c("D1", "D2", "D3"))
      

      然后设置您的排名,我们将在原始数据框中添加一个名为 rank 的字段:

      temp<-transform(temp,rank=ave(1:nrow(temp),Department,FUN=function(x) 
      order(Department[x], Product[x])))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多