En R, j'ai un cadre de données avec des colonnes pour Seat (facteur), Party (facteur) et Votes (numérique). Je souhaite créer un cadre de données récapitulatif avec des colonnes pour le partage Seat, Winning et Vote. Par exemple, à partir de la trame de donnéesUtilisation de reshape + cast pour agréger sur plusieurs colonnes
df <- data.frame(party=rep(c('Lab','C','LD'),times=4),
votes=c(1,12,2,11,3,10,4,9,5,8,6,15),
seat=rep(c('A','B','C','D'),each=3))
Je veux obtenir la sortie
seat winner voteshare
1 A C 0.8000000
2 B Lab 0.4583333
3 C C 0.5000000
4 D LD 0.5172414
Je peux comprendre comment y parvenir. Mais je suis sûr qu'il doit y avoir un meilleur moyen, probablement un interligne rusé utilisant le paquet reshape
de Hadley Wickham. Aucune suggestion?
Pour ce que cela vaut, ma solution utilise une fonction de mon package djwutils_2.10.zip
et est appelée comme suit. Mais il y a toutes sortes de cas spéciaux qui ne sont pas traités, alors je préfère me fier au code de quelqu'un d'autre.
aggregateList(df, by=list(seat=seat),
FUN=list(winner=function(x) x$party[which.max(x$votes)],
voteshare=function(x) max(x$votes)/sum(x$votes)))
Très topique ensemble de données! –
En effet! J'ai généré des graphiques qui affichent les résultats de la dernière élection, et les dernières cotes de betfair.com, et je veux être prêt pour ce soir. Les parcelles sont à http://www.cs.ucl.ac.uk/staff/d.wischik/Interests/Stats/Election/uk2010.html – DamonJW