Ich arbeite mit einem Datensatz, in dem ich den Durchschnitt von zwei Zeilen finden und die beiden Zeilen durch den Durchschnitt ersetzen muss.
Das Folgende ist der Datensatz, in dem ich den Durchschnittswert für jeden Tag für eine bestimmte Woche und einen bestimmten Sensor finden möchte. Sobald ich dies herausgefunden habe, kann ich Transponierungs- / Stapelfunktionen verwenden, um die gewünschte Ausgabe zu erhalten. Jede Hilfe wird geschätzt.
| Sensor | Woche | DoW | Wert |
| EIN | 1 | | 0,25 |
| EIN | 2 | | 0,33 |
| EIN | 3 | | 0,76 |
| EIN | 4 | Sonne (D) | 0,21 |
| EIN | | Sonne (N) | 0,75 |
| EIN | | Mo (D) | 0,33 |
| EIN | | Mo(N) | 0,34 |
| B | 1 | | 0,6 |
| B | 2 | | 0,82 |
| B | 3 | | 0,55 |
| B | 4 | Sonne (D) | 0,4 |
| B | | Sonne (N) | 0,22 |
| B | | Mo (D) | 0,91 |
| B | | Mo(N) | 0,98 |
| C | 1 | | 0,25 |
| C | 2 | | 0,35 |
| C | 3 | | 0,76 |
| C | 4 | Sonne (D) | 0,21 |
| C | | Sonne (N) | 0,75 |
| C | | Mo (D) | 0,33 |
| C | | Mo(N) | 0,34 |
Die erwartete Ausgabe ist -
| Sensor | Woche 1 | Woche 2 | Woche3 | Woche4.So | Woche4.Mo |
| EIN | 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 |
Sehen Sie, ob dieses Stück JSL Ihnen das gibt, was Sie wollen, oder zumindest einen Ausgangspunkt.Ich musste ein paar Datenannahmen treffen, aber es könnte für Sie funktionieren
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 );Vielen Dank für Ihre Antwort. Ich habe diesen Ansatz bereits ausprobiert. Das Problem ist jedoch, dass die Spaltennamen das Format Wert, Woche, Tag haben und das Umbenennen schwierig ist, da sich die Spaltennamen mit der Änderung von Woche und Tag ändern.
Gibt es eine andere Möglichkeit, die ich ausprobieren/lesen kann?
Dazu würden Sie die Zusammenfassungstabellenplattform mit zwei Untergruppenvariablen verwenden.
Zuerst müssten Sie die zusätzlichen Zeichen aus den DoW-Werten entfernen und dann die Zusammenfassung durchführen, also zum Beispiel:
New Column( "Day", Character, "Nominal", Formula( Substr( :DoW, 1, 3 )));
Summary(
Group( :Sensor ),
Mean( :Value ),
Subgroup( :Week, :Day ),
Freq( "None" ),
Weight( "None" )
);