你好,
我有以下脚本,我在其中打开两个数据表,在使用它进行分析之前需要对其进行处理。 其中一个数据集需要从第 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" )
);