やあ、
次のスクリプトでは、分析に使用する前に処理する必要がある 2 つのデータ テーブルを開いています。 データセットの 1 つは、以下に示すように、列 3 (: 接種 ...) から表の列 16 (陽性対照リークテスト) の最後に転置する必要があります。 ただし、名前は関係ありませんが、テーブル構造は常に同じであるため、自動で実行したいと思います。 誰かがそれを実行する方法についてフィードバックを提供できますか? ありがとう
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" )
);
フィードバックをありがとう。
さまざまな例を使用してみましたが、データ テーブルの配布を行う 3 番目のスクリプトを除いて、スクリプト 1 と 2 を実行しても違いはありません。それは正しいですか? スクリプトは列 1 と 2 を削除すると思っていましたが、これは表示されないようです。
無関係な列名ですか、それともテーブル名ですか?
Get Column Names() 関数を使用して、テーブル内の列の名前のリストを取得できます。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
Show( n );
スクリプトを作成しようとしている内容に役立つリストが見つかると思います。
リスト n で Remove() を使用して、列 1 から始まる 2 つの列を削除できます。 使用したい列のリスト m を提供します。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
m = Remove( n, 1, 2 );
Show( m );
これで、この列のリストを使用できます。 簡単な例として、列の分布をプロットします。
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 ) ));
Distribution() が m を列名のリストとして認識するように、 Eval() 関数を使用して引数を評価する必要があることに注意してください。
転置する必要がある場合は、転置する必要がある列を定義するために同じアプローチを使用できるはずです。
それが役立つことを願っています。
フィル
これがあなたが必要とする解決策だと思います
colList = dt2 << get column names;
colList = remove( colList, 1,3);
dt3 = dt2 << Transpose(
columns(
eval(colList)
),
Label( :Sample name ),
Output Table( "dt3" )
);