Estoy trabajando con un conjunto de datos donde necesito encontrar el promedio de dos filas y reemplazar las dos filas por el promedio.
el siguiente es el conjunto de datos en el que quiero encontrar el valor promedio para cada día para una semana y un sensor determinados. Una vez que descubra esto, puedo usar las funciones de transposición/apilado para obtener el resultado deseado. Se agradece cualquier ayuda.
| Sensor | Semana | DoW | Valor |
| A | 1 | | 0.25 |
| A | 2 | | 0.33 |
| A | 3 | | 0.76 |
| A | 4 | Sol (D) | 0.21 |
| A | | Sol(N) | 0.75 |
| A | | Lun(D) | 0.33 |
| A | | lun(n) | 0.34 |
| B | 1 | | 0.6 |
| B | 2 | | 0.82 |
| B | 3 | | 0,55 |
| B | 4 | Sol (D) | 0.4 |
| B | | Sol(N) | 0.22 |
| B | | Lun(D) | 0.91 |
| B | | lun(n) | 0.98 |
| C | 1 | | 0.25 |
| C | 2 | | 0.35 |
| C | 3 | | 0.76 |
| C | 4 | Sol (D) | 0.21 |
| C | | Sol(N) | 0.75 |
| C | | Lun(D) | 0.33 |
| C | | lun(n) | 0.34 |
La salida esperada es -
| Sensor | Semana 1 | Semana 2 | semana3 | Semana 4.dom | Semana4.Lun |
| A | 0.25 | 0.33 | 0.76 | 0.48 | 0.34 |
| B | 0.6 | 0.82 | 0,55 | 0.31 | 0,95 |
| C | 0.25 | 0.35 | 0.76 | 0.48 | 0.34 |
Vea si este bit de JSL le dará lo que quiere, o al menos un punto de partida.Tuve que hacer un par de suposiciones de datos, pero puede funcionar para usted
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 21 ),
New Script(
"Source",
Data Table( "Untitled 29" ) << Transpose(
columns( :Column 1 ),
By( :Column 2 ),
Output Table( "Transpose of Untitled 29" )
)
),
New Column( "Sensor",
Character,
"Nominal",
Set Values(
{"A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B",
"C", "C", "C", "C", "C", "C", "C"}
)
),
New Column( "Week",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Set Values(
[1, 2, 3, 4, ., ., ., 1, 2, 3, 4, ., ., ., 1, 2, 3, 4, ., ., .]
)
),
New Column( "DoW",
Character,
"Nominal",
Set Values(
{"", "", "", "Sun(D)", "Sun(N)", "Mon(D)", "Mon(N)", "", "", "",
"Sun(D)", "Sun(N)", "Mon(D)", "Mon(N)", "", "", "", "Sun(D)", "Sun(N)",
"Mon(D)", "Mon(N)"}
)
),
New Column( "Value",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0.25, 0.33, 0.76, 0.21, 0.75, 0.33, 0.34, 0.6, 0.82, 0.55, 0.4, 0.22,
0.91, 0.98, 0.25, 0.35, 0.76, 0.21, 0.75, 0.33, 0.34]
)
)
);
wait(5); // wait so you can see the original data table
dt << New Column( "The Date",
Character,
"Nominal",
Formula(
dowInclude = "";
If( Is Missing( :Week ) == 0,
theInclude = Char( :Week )
);
If( :DoW != "",
dowInclude = Word( 1, :DoW, "(" )
);
Trim( "Week" || theInclude || " " || dowInclude );
),
Set Selected,
Set Display Width( 83 )
);
wait(5); // wait so you can see the new formula generated column
// Create the means
dtSum = dt << Summary(
invisible,
Group( :Sensor, :The Date ),
Mean( :Value ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" ),
Link to original data table( 0 )
);
// Split the table into the Final Display Format
dtFinal = dtSum << Split(
Split By( :The Date ),
Split( :Value ),
Group( :Sensor ),
Remaining Columns( Drop All ),
Sort by Column Property
);
// Clean up
close( dtSum, nosave );Gracias por su respuesta. Ya probé este enfoque. Pero el problema es que los nombres de las columnas tienen el formato Valor, semana, día y cambiarles el nombre es complicado porque los nombres de las columnas cambian con el cambio de semana y día.
¿Hay alguna otra opción que pueda probar/leer?
Usaría la plataforma de tabla de resumen para hacer esto con dos variables de subgrupo.
Primero, deberá eliminar los caracteres adicionales de los valores de DoW y luego realizar el resumen, por ejemplo:
New Column( "Day", Character, "Nominal", Formula( Substr( :DoW, 1, 3 )));
Summary(
Group( :Sensor ),
Mean( :Value ),
Subgroup( :Week, :Day ),
Freq( "None" ),
Weight( "None" )
);