Muestra la media ponderada por grupo en el marco de datos.

Problemas relacionados con el comandoby yweighted.mean ya existe pero ninguno pudo ayudar a resolver mi problema. Soy nuevo en R y estoy más acostumbrado al lenguaje de minería de datos que a la programación.

Tengo un marco de datos con para cada individuo (observación / fila) el ingreso, el nivel educativo y el peso de la muestra. Quiero calcular la media ponderada de los ingresos por nivel educativo, y quiero que el resultado se asocie a cada individuo en una nueva columna de mi marco de datos original, como este:

obs income education weight incomegroup
1.   1000      A       10    --> display weighted mean of income for education level A
2.   2000      B        1    --> display weighted mean of income for education level B
3.   1500      B        5    --> display weighted mean of income for education level B
4.   2000      A        2    --> display weighted mean of income for education level A

Lo intenté:

data$incomegroup=by(data$education, function(x) weighted.mean(data$income, data$weight))    

No funciona. La media ponderada se calcula de alguna manera y aparece en la columna "grupo de ingresos", pero para todo el conjunto en lugar de por grupo o solo para un grupo, no lo sé. Leo cosas sobre paquetesplyr oaggregate pero no parece hacer lo que me interesa.

losave{stats} El comando proporciona exactamente lo que estoy buscando, pero solo por un simple medio:

data$incomegroup=ave(data$income,data$education,FUN = mean)

No se puede usar con pesas.

¡Gracias de antemano por su ayuda!

Respuestas a la pregunta(3)

Su respuesta a la pregunta