Je travaille avec un ensemble de données dans lequel je dois trouver la moyenne de deux lignes et remplacer les deux lignes par la moyenne.
Voici l'ensemble de données dans lequel je veux trouver la valeur moyenne pour chaque jour pour une semaine et un capteur donnés. Une fois que j'ai compris cela, je peux utiliser les fonctions de transposition/empilement pour obtenir la sortie souhaitée. Toute aide est appréciée.
| Capteur | La semaine | DoW | Évaluer |
| UN | 1 | | 0,25 |
| UN | 2 | | 0,33 |
| UN | 3 | | 0,76 |
| UN | 4 | Soleil(D) | 0,21 |
| UN | | Soleil(N) | 0,75 |
| UN | | Lun(D) | 0,33 |
| UN | | Lun(N) | 0,34 |
| B | 1 | | 0,6 |
| B | 2 | | 0,82 |
| B | 3 | | 0,55 |
| B | 4 | Soleil(D) | 0,4 |
| B | | Soleil(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 | Soleil(D) | 0,21 |
| C | | Soleil(N) | 0,75 |
| C | | Lun(D) | 0,33 |
| C | | Lun(N) | 0,34 |
La sortie attendue est -
| Capteur | Semaine 1 | Semaine 2 | Semaine3 | Semaine4.Dim | Semaine4.Lun |
| UN | 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 |
Voyez si ce morceau de JSL vous donnera ce que vous voulez, ou au moins un point de départ.J'ai dû faire quelques hypothèses de données, mais cela peut fonctionner pour vous
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 );Merci pour votre réponse. J'ai déjà essayé cette approche. Mais le problème est que les noms de colonne sont au format Valeur, semaine, jour et les renommer est délicat car les noms de colonne changent avec le changement de semaine et de jour.
Existe-t-il une autre option que je peux essayer / lire?
Vous utiliseriez la plate-forme de tableau récapitulatif pour ce faire avec deux variables de sous-groupe.
Vous devez d'abord supprimer les caractères supplémentaires des valeurs DoW, puis effectuer le résumé, par exemple :
New Column( "Day", Character, "Nominal", Formula( Substr( :DoW, 1, 3 )));
Summary(
Group( :Sensor ),
Mean( :Value ),
Subgroup( :Week, :Day ),
Freq( "None" ),
Weight( "None" )
);