每个字母表每个首选排名获得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
答案 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