Tengo un Google Sheets donde los productos se enumeran como filas y los atributos como columnas. El atributo de cada producto se clasifica en una escala de 1-10. Mi última columna es un promedio de estos valores (es decir =Average(B2:D2)
). Esto funciona bien si cada atributo tiene el mismo peso.
+--------+-------+-------+-------+---------+
| | Attr1 | Attr2 | Attr3 | Overall |
+--------+-------+-------+-------+---------+
| Prod 1 | 10 | 8 | 9 | 9 |
| Prod 2 | 2 | 10 | 7 | 6.33 |
| Prod 3 | 4 | 6 | 6 | 5.33 |
+--------+-------+-------+-------+---------+
El problema es que quiero que cada atributo tenga un peso diferente. Por ejemplo, Attr1 podría no ser importante y solo debería valer el 50%, mientras que Attr3 es muy importante y debería valer el 300%.
+--------+-------------+-------+--------------+---------+
| | Attr1 (50%) | Attr2 | Attr3 (300%) | Overall |
+--------+-------------+-------+--------------+---------+
| Prod 1 | 10 | 8 | 9 | 8.89 |
| Prod 2 | 2 | 10 | 7 | 7.11 |
| Prod 3 | 4 | 6 | 6 | 5.78 |
+--------+-------------+-------+--------------+---------+
El valor para la primera fila sería:
(10*0.5 + 8*1 + 9*3) / (0.5+1+3) = 8.89
que podría calcularse usando:
(
B2*(IFERROR(REGEXEXTRACT(B1, "\d+"), 100)/100)
+ C2*(IFERROR(REGEXEXTRACT(C1, "\d+"), 100)/100)
+ D2*(IFERROR(REGEXEXTRACT(D1, "\d+"), 100)/100)
) / (
IFERROR(REGEXEXTRACT(B1, "\d+"), 100)/100
+ IFERROR(REGEXEXTRACT(C1, "\d+"), 100)/100
+ IFERROR(REGEXEXTRACT(D1, "\d+"), 100)/100
)
que, como puede ver, puede ser muy difícil de administrar a medida que se agregan más atributos. Idealmente, estoy buscando una solución que no requiera la creación de celdas temporales para ayudar con los cálculos.
¿Existe alguna función incorporada o una convención común que pueda ayudarme a calcular estos promedios ponderados?
fuente
$
significan los signos?dollar sign in excel
es lo mismo, ya que encontrarás más documentación al respecto.sumproduct
Si sus pesos están en la fila 2 de B a L, y los datos que desea promediar están en las filas 3 y más altas, por ejemplo, puede usar sumproduct de la siguiente manera:
fuente
Google parecía haber escuchado. Al menos en mi instancia de Google Sheets, la función
AVERAGE.WEIGHTED
existe. Por la ayuda:fuente
El código de Lipis no funcionaba para mí, así que aquí hay una actualización. Este código:
funciona con la versión actual de las hojas de cálculo de Google que abordan correctamente los elementos de la matriz
comprueba si los valores son números
tiene un interruptor para considerar valores cero o no
Código:
fuente
Corregir el código de Lipis para que funcione con la versión actual de las hojas de cálculo de Google:
fuente
#NUM!
como resultado. El código que Lipis hizo todavía funciona. Solo está ignorando la matriz 2d que se devuelve.ARRAYFORMULA () puede calcular un promedio ponderado en las hojas de cálculo de Google (y más).
Almacenar los pesos por separado en B2: D2 simplifica la lectura de la fórmula. Calcular el promedio ponderado para E3 es similar a SUMPRODUCT () anterior (copiar / pegar para E4 y E5):
=ARRAYFORMULA(sum(B3:D3 * $B$2:$D$2)/sum($B$2:$D$2))
Usar RegExExtract () para obtener los pesos de $ B $ 1: $ D $ 1 es un cambio simple en ARRAYFORMULA (). Reemplace el rango simple con la expresión más compleja "
iferror(regexextract($B$1:$D$1,"\d+"),100)/100
" y la fórmula para E3 se convierte en (copiar / pegar para E4 y E5):=ARRAYFORMULA(sum(B3:D3 * iferror(regexextract($B$1:$D$1,"\d+"),100)/100)/sum(iferror(regexextract($B$1:$D$1,"\d+"),100)/100))
Nota: Regexp requiere nombres de atributos sin números; entonces, use AttrA, AttrB y AttrC en lugar de Attr1, Attr2 y Attr3.
fuente
Habiendo leído tu pregunta cuidadosamente,
Se me ocurrió esta solución, que no usa celdas temporales.
Fórmula
Captura de pantalla
Explicado
El
REGEXEXTRACT
extraerá el valor en la cabecera después de la primera abrazadera recta yVALUE
lo convertirá en un número. LaIFERROR
fijará el valor en100
si no se encuentra nada yARRAYFORMULA
hará que sea posible seleccionar un rango, en lugar de las células individuales.Ejemplo
He creado un archivo de ejemplo para usted: ¿Cómo calcular los promedios ponderados en las hojas de cálculo de Google?
fuente
Como la respuesta aceptada es usar Google Apps Script, también creé un pequeño fragmento.
Código
Captura de pantalla
Nota
El guión seguirá la misma lógica que se presenta en esta publicación. La principal ventaja es que calculará los valores generales de una vez.
Ejemplo
He creado un archivo de ejemplo para usted: ¿Cómo calcular los promedios ponderados en las hojas de cálculo de Google?
fuente
Para promedios ponderados simples , puede agregar el valor de la celda varias veces. Como si desea que A1 sea 75% y B1 25%, puede ingresar
=AVERAGE (A1,A1,A1,B1)
. Entonces, específicamente para el suyo, sería=AVERAGE (B2,C2,C2,D1,D2,D2,D2,D2,D2,D2)
, lo que pesaría B2 como la mitad de C2 (50%) y D2 como 3x C2 (300%).Las cosas más complicadas están por encima de mi calificación salarial. :)
fuente
En realidad, ambas versiones Average.weighted y sumproduct dan el mismo resultado:
Así que prefiero usar el primero ya que es mucho más simple de manejar, sin embargo, no sé cómo agregar otros pesos a esta fórmula.
Esta es la información sobre herramientas, pero no sé cómo agregar solo pesos y no valores adicionales
fuente
Hay una manera bastante simple de usar solo funciones dadas.
donde E contenido es el número de puntos y G la importancia de esos puntos.
fuente