/ / Moyenne pondérée sur différentes lignes - r, dplyr

Moyenne pondérée sur différentes lignes - r, dplyr

J'ai un cadre de données avec trois variables comme celle-ci:

variable <- c("A", "B", "C", "B", "B", "A", "C")
mean <- c(2,4,5,4,3,1,5)
counts <- c(100, 200, 300, 150, 400, 200,250)

df <- data.frame(variable, mean, counts)

Je veux multiplier le mean avec le nombre de counts et les ajouter par variable. Ensuite, je veux diviser le résultat par le nombre de counts par variable. Le résultat devrait ressembler à cet exemple pour le variable A:

(2 * 100 + 1 * 200) / 300 = 1,333333

Ensuite, je veux agréger le résultat par variable comme dans le group_by et summarise fonction dans dplyr. Une idée comment cela fonctionne? Je l'ai essayé avec group_by et mutate mais il n'y avait pas d'agrégation. Le résultat devrait ressembler à celui-ci:

Variable     Mean
A         some value
B         some value
C         some value

Réponses:

3 pour la réponse № 1

Cela fonctionnerait - vous devez simplement spécifier le calcul car un appel à mean divisera bien sûr par le nombre (par exemple 2 pour le premier) bibliothèque (tidyverse)

df %>%
mutate(multiple = mean * counts) %>%
group_by(variable) %>%
summarise(mean = sum(multiple) / sum(counts))

2 pour la réponse № 2
library(plyr)
ddply(.data = df,.variables = c("variable"),
function(x){sum(x$mean*x$counts)/sum(x$counts)})