J'ai un simple cadre de données avec 3 colonnes: nom, but et réelle. Comme il s'agit d'une simplification d'une base de données beaucoup plus grande, je veux utiliser dplyr pour calculer le nombre de fois qu'un objectif a été atteint par chaque personne.Comment passer une fonction anonyme à dplyr récapituler
df <- data.frame(name = c(rep('Fred', 3), rep('Sally', 4)),
goal = c(4,6,5,7,3,8,5), actual=c(4,5,5,3,3,6,4))
Le résultat devrait ressembler à ceci:
je devrais être en mesure de passer une fonction anonyme similaire à ce qui est indiqué ci-dessous, mais ne pas la syntaxe tout à fait à droite:
library(dplyr)
g <- group_by(df, name)
summ <- summarise(g, met_goal = sum((function(x,y) {
if(x>y){return(0)}
else{return(1)}
})(goal, actual)
)
)
Quand je lance le code ci-dessus, je vois 3 de ces erreurs:
Messages d'avertissement: 1: Dans le cas (x == y) {: la condition a une longueur> 1 et seul le premier élément sera être utilisé
Cela répond bien à la question. J'ai compliqué intentionnellement ma tentative parce que je voulais voir comment une fonction anonyme plus complexe/générale pouvait être transmise. –
@MichaelSzczepaniak - Notez que vous pouvez * utiliser * une fonction anonyme. C'était la déclaration 'if()' qui vous lançait. Par exemple, 'sum ((fonction (x, y) x <= y) (objectif, réel))' fonctionnerait. –
C'était exactement ce que je cherchais. Merci d'avoir expliqué ceci (deux fois ;-). –