안녕,
분석에 사용하기 전에 처리해야 하는 두 개의 데이터 테이블을 여는 다음 스크립트가 있습니다. 데이터 세트 중 하나는 아래와 같이 열 3(:Inoculum ...)에서 테이블 열 16(Positive control leak-test)의 끝으로 옮겨야 합니다. 그러나 이름은 관련이 없지만 테이블 구조는 항상 동일하므로 실행을 자동으로 만들고 싶습니다. 실행 방법에 대한 피드백을 제공할 수 있는 사람이 있습니까? 감사해요
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과 두 번째를 실행할 때 차이가 없습니다. 맞습니까? 스크립트가 열 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" )
);