J'ai des difficultés à reformater les données d'une table dans JMP. J'espère transformer un tableau d'un format de «classement» en «format de score hebdomadaire», par exemple
De:
Semaine 1st_Name 1st_Score 2nd_Name 2nd_Score 3rd_Name 3rd_Score
1 David 5 Tim 2 Rachel 1
2 Tim 7 Alexis 4 Rachel 2
3 Tina 6 Rachel 5 David 2
À:
Semaine David Tim Rachel Alexis Tina
1 5 2 1 0 0
2 0 7 2 4 0
3 2 0 5 0 6
Je peux ordonner les colonnes différemment dans l'extraction de données d'origine si cela facilite le reformatage.
Si quelqu'un est en mesure de vous aider, je vous en serais très reconnaissant.
Cela est facile à faire.
Interactivement, vous:
- Empilez les noms et les scores en spécifiant dans la boîte de dialogue Empiler pour utiliser la pile de séries multiples
- Puis divisez la table empilée
- Diviser par données de colonne
- Spécifiez la colonne Data2 comme colonne fractionnée
- Ensuite, vous devrez parcourir chaque colonne et sélectionner et modifier les valeurs manquantes à 0
Voici un script qui illustre la solution basée sur vos données d'exemple
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 3 ),
New Column( "Week", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3] ) ),
New Column( "1st_Name", Character, "Nominal", Set Values( {"David", "Tim", "Tina"} ) ),
New Column( "1st_Score", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [5, 7, 6] ) ),
New Column( "2nd_Name", Character, "Nominal", Set Values( {"Tim", "Alexis", "Rachel"} ) ),
New Column( "2nd_Score", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [2, 4, 5] ) ),
New Column( "3rd_Name", Character, "Nominal", Set Values( {"Rachel", "Rachel", "David"} ) ),
New Column( "3rd_Score", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3] ) )
);
dtStack = dt << Stack(
columns(
:"1st_Name"n,
:"1st_Score"n,
:"2nd_Name"n,
:"2nd_Score"n,
:"3rd_Name"n,
:"3rd_Score"n
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Number of Series( 2 ),
Output Table( "Stacked Data" )
);
dtFinal = dtStack << Split(
Split By( :Data ),
Split( :Data 2 ),
Remaining Columns( Drop All ),
Sort by Column Property
);
For( i=1, i<=N Cols(dtFinal), i++,
missing = dtFinal << get rows where( isMissing(as column( i )));
try(column(i)[missing]=0);
);