Hallo,
Ich habe das folgende Skript, in dem ich zwei Datentabellen öffne, die ich verarbeiten muss, bevor ich sie für die Analyse verwende. Einer der Datensätze erfordert eine Übertragung von Spalte 3 (:Inokulum ...) an das Ende der Tabellenspalte 16 (Positivkontroll-Lecktest), wie unten gezeigt. Allerdings möchte ich die Ausführung automatisch durchführen, da die Namen irrelevant sind, die Tabellenstruktur jedoch immer gleich ist. Könnte mir bitte jemand Feedback dazu geben, wie es funktioniert? Danke
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" )
);
Danke für das Feedback.
Ich habe versucht, die verschiedenen Beispiele zu verwenden, aber mit Ausnahme des dritten Skripts, das die Verteilung der Datentabelle übernimmt, gibt es keinen Unterschied zwischen der Ausführung des ersten und des zweiten Skripts. Ist das richtig? Ich dachte, das Skript würde die Spalten 1 und 2 entfernen, aber das scheint nicht angezeigt zu werden.
Sind die Spaltennamen irrelevant oder die Tabellennamen?
Mit der Funktion „Get Column Names()“ können Sie eine Liste der Spaltennamen in Ihrer Tabelle abrufen.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
Show( n );
Ich denke, Sie werden nützliche Listen für das finden, was Sie als Skript erstellen möchten.
Wir können Remove() für die Liste n verwenden, um zwei Spalten beginnend mit Spalte 1 zu entfernen. Um uns die Liste m der Spalten zu geben, die wir verwenden möchten.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
m = Remove( n, 1, 2 );
Show( m );
Jetzt können wir diese Spaltenliste verwenden. Als einfaches Beispiel werden wir die Verteilungen der Spalten grafisch darstellen.
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 ) ));
Beachten Sie, dass wir die Funktion Eval() verwenden müssen, um das Argument auszuwerten, damit Distribution() m als Liste von Spaltennamen erkennt.
Sie sollten in der Lage sein, den gleichen Ansatz zum Definieren der Spalten zu verwenden, die Sie transponieren müssen, falls dies erforderlich ist.
Ich hoffe das hilft.
Phil
Ich glaube, das ist die Lösung, die Sie brauchen
colList = dt2 << get column names;
colList = remove( colList, 1,3);
dt3 = dt2 << Transpose(
columns(
eval(colList)
),
Label( :Sample name ),
Output Table( "dt3" )
);