열을 목록과 일치하게 유지하고 나머지는 제거안녕 -
다음을 수행하는 데이터 테이블에서 열(열 이름 기준)을 제거하고 싶습니다. ~ 아니다 목록과 일치합니다. 지금까지 JSL 코드를 따르고 있지만 작동하지 않습니다.
의견을 보내주셔서 감사합니다.
Names Default To Here( 1 );
bigClass = Open( "$SAMPLE_DATA/Big Class.JMP" );
dt = Current Data Table();
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names( String );
For(j = 1, j <= N Items( col_of_interest ), j++,
For( i = N Items( col_names ), i > 0, i--,
if ( not( col_names[i] == col_of_interest[j],
Remove From( col_names, i ))
);
);
);
dtNew = dt << subset( all rows, columns( col_names ) ); Wait( 0 );
품질 및 프로세스 엔지니어링윈도우Re: 목록과 일치하는 열을 유지하고 나머지는 제거하세요실제로 JMP는 변수 j와 함수 J()를 혼동하지 않습니다. 함수 이름을 사용할 때 함수 이름 뒤에 괄호가 와야 하거나, 그렇지 않으면 변수처럼 다른 것으로 범위가 지정되기 때문입니다. 그 이름은 존재합니다.
그러나 JSL에서는 이름이 중요하기 때문에 일반적으로 귀하의 경고를 진지하게 받아들입니다!
Re: 목록과 일치하는 열을 유지하고 나머지는 제거하세요JMP 16을 사용하는 경우 다른 옵션:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.JMP" );
//list of columns to include
col_of_interest = {"name", "age", "weight", "does not exist"};
// Option 1 - subset table
// Filter out columns in the list that aren't in the table and subset
cols_checked = filter each({cn}, dt << Get Column Names( String ), n items(loc( col_of_interest, cn ))>0);
dtNew = dt << subset( all rows, columns( cols_checked ) );
// Option 2 - delete columns from original table
for each({c}, dt << get column references, if( n items( loc( col_of_interest, c << get name ) ) == 0, dt << delete columns(c) ) );Re: 목록과 일치하는 열을 유지하고 나머지는 제거하세요행렬 함수 J, jthi에 대한 의견과 조언에 감사드립니다. 다시 시도하겠습니다.
Re: 목록과 일치하는 열을 유지하고 나머지는 제거하세요두 목록을 비교할 때 루프를 통해 작업하는 동안 결과를 포함할 세 번째 목록을 만든 다음 모든 루핑이 완료되면 세 번째 목록을 사용하여 조치를 취하는 것이 더 쉽다는 것을 알았습니다.아래 코드는 시도 중인 작업을 수행할 수 있습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.JMP" );
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names( String );
col_list = {};
For( i = N Items( col_names ), i > 0, i--,
if(contains(col_of_interest, col_names[i]),
insert into(col_list, col_names[i])
);
);
dtNew = dt << subset( all rows, columns( col_list ) );
Wait( 0 );
Re: 목록과 일치하는 열을 유지하고 나머지는 제거하세요데이터 테이블의 모든 열을 반복하고 필요할 때 제거합니다. 아이디어를 유지하려면 디버깅을 도와드릴 수도 있습니다.
Names Default To Here(1);
bigClass = Open("$SAMPLE_DATA/Big Class.JMP");
dt = Current Data Table();
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names(String);
For(i = 1, i <= N Items(col_names), i++,
If(!Contains(col_of_interest, col_names[i]),
dt << Delete Columns(col_names[i]);
);
);
Wait(0);또한 JMP에는 행렬 함수 J()가 있으므로 J를 변수 이름으로 사용하지 않는 것이 좋습니다.
편집하다:
또한 테이블을 연 후 이미 참조가 있으므로 Current Data Table()을 사용할 필요가 없습니다. 또한 열을 제거하는 데 내가 선호하는 방법은 다음과 같습니다(연관 배열을 사용하여 추가 열만 가져오고 이를 제거함).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.JMP");
col_of_interest = {"name", "age", "weight"};
//get columns which are "extra"
col_names_aa = Associative Array(dt << Get Column Names(String));
col_names_aa << Remove(Associative Array(col_of_interest));
col_names_to_remove = col_names_aa << get keys;
Show(col_names_to_remove);
dt << Delete Columns(col_names_to_remove);