你好,
我有以下腳本,我在其中打開兩個數據表,在使用它進行分析之前需要對其進行處理。 其中一個資料集需要從第 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" )
);
感謝您的退款。
我嘗試使用不同的範例,但除了執行資料表分配的第三個腳本之外,運行腳本一和第二個腳本時沒有區別。這是正確的嗎? 我認為腳本會刪除第 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 ) ));
請注意,我們需要使用 Eval() 函數來計算參數,以便 Distribution() 將 m 識別為列名列表。
如果您需要這樣做,您應該能夠使用相同的方法來定義需要轉置的列。
我希望這有幫助。
菲爾
我相信這就是您需要的解決方案
colList = dt2 << get column names;
colList = remove( colList, 1,3);
dt3 = dt2 << Transpose(
columns(
eval(colList)
),
Label( :Sample name ),
Output Table( "dt3" )
);