使用循环和if语句获取列表元素的排名

时间:2018-03-08 02:52:08

标签: r

每个字母表每个首选排名获得3分,每个第二选择排名获得2分,每个第三选择排名获得1分

Rank(list(c("A", "B", "C", "D"), c("B", "C", "D", "A")))

在这个例子中,A获得3分,B获得5分,C获得3分,D获得1分

所以获胜者是B.

如何通过使用循环和if语句来定义它,以便我可以得到结果:

Rank(list(c("A", "B", "C", "D"), c("B", "C", "D", "A")))

[[1]]
[1] "B"

[[2]]
[1] 3 5 3 1

1 个答案:

答案 0 :(得分:1)

你不需要循环或if语句。

一种解决方案可能是将您的列表转换为向量并创建具有排名的单个data.table

# Create list
foo <- list(c("A", "B", "C", "D"), 
            c("B", "C", "D", "A"))

library(data.table)
# Create long object with ranking
# Sum ranking by value (letter in list)
result <- melt(data.table(unlist(foo), x = 3:0), "x")[, sum(x), value]
   value V1
1:     A  3
2:     B  5
3:     C  3
4:     D  1
# Solution wanted by OP
list(result[which.max(V1), value], result$V1)
[[1]]
[1] "B"

[[2]]
[1] 3 5 3 1