按条件*和* R数据帧的每一行中的列名选择一列?

时间:2012-01-08 14:30:28

标签: r

如果我有分区和候选人的选举结果数据框,是否有一种简单的方法可以找到R中每个区的获胜者?也就是说,对于每一行,选择最大值该最大值的列名?

District   CandidateA   CandidateB   CandidateC
1          702          467          35
2          523          642          12
...

所以我不仅要选择第1行的702和第2行的642,还要选择第1行的“CandidateA”和第2行的“CandidateB”。

我认为这是一个学习问题,因为我知道我可以用任何通用脚本语言(如Perl或Ruby)来完成。也许R不是这个的工具,但它似乎可能。谢谢。

2 个答案:

答案 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

你需要担心关系吗?请参阅whichwhich.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")
}