<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos,
Me encuentro muchas veces con esta pregunta;
Aplicando un tipo de fórmula a muchas columnas recién generadas. ¿Podría alguien explicar la lógica principal detrás de esto?
Por ejemplo:
1. Tengo un conjunto de datos de 72 años con 12 meses. Me gustaría establecer uno de los mejores para el año / mes y aceptarlo como = 100 y me gustaría comparar todos los demás a ese año / mes en porcentaje (en particular, aumento de ingresos o disminución en porcentaje).
2. Tengo 1 columna para pensar como MainColumn con otras 100 columnas (1,2,3,4,5, ...) en una tabla de datos, y al agregar 100 nuevas columnas me gustaría usar la misma fórmula para cada una: NewColumn1 = Column1 / MainColumn, NewColumn2 = Column2 / MainColumn ... etc ...
3. Tengo columnas en relaciones pareadas (Columna1 Columna2, Columna3 Columna4) y me gustaría crear una nueva columna (ColumnaNuevo1) con una fórmula relacionada con las columnas pareadas (= Columna1 + Columna2), (ColumnaNuevo2 = Columna3 + Columna4) ... y así sucesivamente .
¿Cómo hacer esto?
Muchas gracias
Asumo que estás buscando una solución de scripting. A continuación se presentan algunas ideas.
//Example tables
dt1 = New Table("example 1",
add rows(12 * 72),
New Column("year", numeric, Formula(Sequence(1944, 2015, 1, 12))),
New Column("month", numeric, values(Repeat(1 :: 12, 72))),
New Column("revenue", numeric, Formula(Random Integer(10000)))
);
dt2 = New Table("example 2", add rows(5), New Column("main column", numeric, values(1 :: 5)));
dt2 << add multiple columns("column", 10, after last, numeric);
For(i = 2, i <= 11, i++,
Column(dt2, i) << set formula(Random Integer(10))
);
// 1)
dt1 << New Column("revenue, % of year's best month", numeric, Format("percent"), Formula(:revenue / Col Max(:revenue, year)));
// 2) and 3) The trick is to use Eval Expr() and Name Expr() when defining formulas.
cols = dt2 << get column names;
// add formulas for 2
For(i = 2, i <= 11, i++,
colname = Char(cols[i]) || " by main";
f = Eval Expr(Expr(cols[i]) / :main column);
dt2 << New Column(colname, numeric, formula(Name Expr(f)));
);
// dito for 3
For(i = 2, i <= 6, i = i + 2,
colname = Char(cols[i]) || "+" || Char(cols[i + 1]);
f = Eval Expr(Expr(cols[i]) + Expr(cols[i + 1]));
dt2 << New Column(colname, numeric, formula(Name Expr(f)));
);