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!