如果我有分区和候选人的选举结果数据框,是否有一种简单的方法可以找到R中每个区的获胜者?也就是说,对于每一行,选择最大值和该最大值的列名?
District CandidateA CandidateB CandidateC
1 702 467 35
2 523 642 12
...
所以我不仅要选择第1行的702和第2行的642,还要选择第1行的“CandidateA”和第2行的“CandidateB”。
我认为这是一个学习问题,因为我知道我可以用任何通用脚本语言(如Perl或Ruby)来完成。也许R不是这个的工具,但它似乎可能。谢谢。
答案 0 :(得分:5)
d <- read.table(textConnection(
"District CandidateA CandidateB CandidateC
1 702 467 35
2 523 642 12"),
header=TRUE)
d2 <- d[,-1] ## drop district number
data.frame(winner=names(d2)[apply(d2,1,which.max)],
votes=apply(d2,1,max))
结果:
winner votes
1 CandidateA 702
2 CandidateB 642
你需要担心关系吗?请参阅which
和which.max
的帮助,他们对待关系的方式不同......
答案 1 :(得分:1)
如果这不是太乱,您可以尝试运行for
循环并使用cat
打印出结果。因此,如果您的data.frame
对象为x
:
for(i in 1:length(x$District)) {
row <- x[i,]
max_row <- max(row[2:length(row)])
winner_row <- names(x)[which(row==max_row)]
cat(winner_row, max_row, "\n")
}