【问题标题】:How to compute a weighted ranking score?如何计算加权排名分数?
【发布时间】:2020-08-20 15:04:19
【问题描述】:

给定一个排名问题的输出:

df <- structure(list(rank1 = c("A", "NA", "C", "B", "A"), rank2 = c("B", 
"NA", "A", "A", "B"), rank3 = c("C", "NA", "B", "C", "NA"), rank4 = c("D", 
"NA", "E", "D", "NA"), rank5 = c("E", "NA", "D", "E", "NA")), .Names = c("rank1", 
 "rank2", "rank3", "rank4", "rank5"), class = "data.frame", row.names = c("1", 
 "2", "3", "4", "5"))


  rank1 rank2 rank3 rank4 rank5
1     A     B     C     D     E
2    NA    NA    NA    NA    NA
3     C     A     B     E     D
4     B     A     C     D     E
5     A     B    NA    NA    NA

我想计算每个字母的排名分数 = 字母上每个排名的计数数 * 每个排名的权重(rank1 = 5 分,rank2 = 4 分,...,rank5 = 1 分)/总响应数。

为了按字母计算每个等级的计数,我使用了这个:

table(unlist(data1), c(col(data1)))

     1 2 3 4 5
  A  2 2 0 0 0
  B  1 2 1 0 0
  C  1 0 2 0 0
  D  0 0 0 2 1
  E  0 0 0 1 2
  NA 1 1 2 2 2

所以现在我想计算每个字母的分数(例如 A = (2 * 5 + 2 * 4) / 4) 我不知道如何获得总响应数,然后如何创建一个函数来计算排名分数。

【问题讨论】:

    标签: r ranking ranking-functions weighting


    【解决方案1】:

    使用apply函数可以遍历表格的每一行,然后计算分数

    apply(table(unlist(df), c(col(df))), 1, FUN = function(row){
      return((row[1] * 5 + row[2] * 4 + row[3] * 3 + row[4] * 2 + row[5] * 1) / sum(row))
    })
    
     A        B        C        D        E       NA 
    4.500000 4.000000 3.666667 1.666667 1.333333 2.625000 
    

    apply 函数的有趣部分将整行传递给函数,然后将行的每个对应元素乘以权重,然后除以该行的受访者总数

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 2019-11-03
      • 2022-01-24
      相关资源
      最近更新 更多