如何计算加权排名分数?
How to compute a weighted ranking score?
给定一个排名问题的输出:
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)
我不知道如何获得总响应数,然后如何创建一个函数来计算排名分数。
您可以使用应用函数遍历 table 的每一行,然后计算得分
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 函数有趣的部分是将整行传递给该函数,然后就是将该行的每个对应元素乘以权重,然后除以该行的受访者总数
给定一个排名问题的输出:
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) 我不知道如何获得总响应数,然后如何创建一个函数来计算排名分数。
您可以使用应用函数遍历 table 的每一行,然后计算得分
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 函数有趣的部分是将整行传递给该函数,然后就是将该行的每个对应元素乘以权重,然后除以该行的受访者总数