Возможно, не самое элегантное решение, но, кажется, работает.
ДАННЫЕ :
set.seed(111)
party <- rep(LETTERS[1:2], 5)
location <- c(rep("a",2), rep("b",2),rep("c",2),rep("d",2),rep("e",2))
votes <- sample(1:100000, 10)
df <- data.frame(party, location, votes)
ШАГ 1 : определить наиболее голоса, поданные по местоположению с использованием aggregate
:
most_votes <- aggregate(votes ~ location, data = df, max)
ШАГ 2 : сопоставьте голоса в most_votes
с голосами в df
и назначьте метку, например wins
, для идентификации партии с большинством голосов:
df$winner <- ifelse(df$votes[match(df$votes,most_votes$votes)], "wins", NA)
РЕЗУЛЬТАТ :
df
party location votes winner
1 A a 99283 wins
2 B a 27417 <NA>
3 A b 34885 wins
4 B b 6140 <NA>
5 A c 3117 <NA>
6 B c 29258 wins
7 A d 84249 <NA>
8 B d 90875 wins
9 A e 86641 wins
10 B e 18567 <NA>