CIAO,
Ho il seguente script in cui apro due tabelle di dati che devo elaborare prima di utilizzarlo per l'analisi. Uno dei set di dati richiede la trasposizione dalla colonna 3 (:Inoculum ...) alla fine della colonna 16 della tabella (Positive control leak-test) come mostrato di seguito. Tuttavia, vorrei eseguire automaticamente poiché i nomi sono irrilevanti ma la struttura della tabella è sempre la stessa. Qualcuno potrebbe fornire un feedback per favore su come farlo funzionare? Grazie
dt1 = Open(
"C:\Users\ioliveira\Desktop\data\DEF-BMP Curves.csv",
columns(
New Column( "Sample", Character, "Nominal" ),
New Column( "Hour", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Average", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Minimum", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Maximum", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
dt2 = Open(
"C:\Users\ioliveira\Desktop\data\DM for BMP 31.07.18.xlsx",
Worksheets( "Protocol" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 3 ),
Data Starts on Row( 4 ),
Data Starts on Column( 1 ),
Data Ends on Row( 6 ),
Data Ends on Column( 16 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
dt2 << Transpose(
columns(
:Inoculum,
:Positive Control,
:Name( "FB Powder 2/5 1.05.18" ),
:Economizer WEL 6.7 bar 15.05.18,
:Chicken muck black REL 08.05.18,
:Chicken muck white REL 08.05.18,
:Name( "Rye Ag-Bag EEL" ),
:M301,
:M302,
:M303,
:Name( "WEL ECON 24/7" ),
:Name( "WEL STRAW 24/7" ),
:Name( "WEL STRAW 20/6" ),
:Name( "Positive Control Leak-Test" )
),
Label( :Sample name ),
Output Table( "dt3" )
);
Grazie per il feedback.
Ho provato a utilizzare i diversi esempi ma ad eccezione del terzo scrit che esegue la distribuzione della tabella dati, non c'è differenza nell'esecuzione dello script uno e del secondo. È corretto? Pensavo che lo script avrebbe rimosso le colonne 1 e 2 ma questo non sembra essere visualizzato.
Sono i nomi delle colonne che sono irrilevanti o i nomi delle tabelle?
Puoi ottenere un elenco dei nomi delle colonne nella tua tabella con la funzione Ottieni nomi colonne().
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
Show( n );
Penso che troverai elenchi utili per ciò che stai cercando di scrivere.
Possiamo usare Remove() nell'elenco, n, per eliminare 2 colonne a partire dalla colonna 1. Per darci l'elenco, m, di colonne che desideriamo utilizzare.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
m = Remove( n, 1, 2 );
Show( m );
Ora possiamo usare questo elenco di colonne. Come semplice esempio tracceremo le distribuzioni delle colonne.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
m = Remove( n, 1, 2 );
dt << Distribution( Y( Eval( m ) ));
Si noti che è necessario utilizzare la funzione Eval() per valutare l'argomento in modo che Distribution() riconosca m come un elenco di nomi di colonna.
Dovresti essere in grado di utilizzare lo stesso approccio per definire le colonne che devi trasporre, se è quello che dovevi fare.
Spero che aiuti.
Fil
Credo che questa sia la soluzione di cui hai bisogno
colList = dt2 << get column names;
colList = remove( colList, 1,3);
dt3 = dt2 << Transpose(
columns(
eval(colList)
),
Label( :Sample name ),
Output Table( "dt3" )
);