Выберите столбец по критериям * и * имя столбца в каждой строке кадра данных R? - PullRequest
1 голос
/ 08 января 2012

Если у меня есть данные о результатах выборов по округам и кандидатам, есть ли простой способ найти победителя в каждом округе в R?То есть для каждой строки выберите максимальное значение и имя столбца для этого максимального значения?

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

Так что я бы хотел выбрать не только 702 в строке 1 и642 в строке 2, а также «CandidateA» из строки 1 и «CandidateB» в строке 2.

Я задаю это как вопрос для обучения, так как знаю, что могу сделать это с помощью любого сценария общего назначения.язык как Perl или Ruby.Возможно, R не является инструментом для этого, но кажется, что это может быть.Спасибо.

Ответы [ 2 ]

5 голосов
/ 08 января 2012
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 голос
/ 08 января 2012

Если это не слишком грязно, вы можете попробовать запустить цикл 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")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...