값이 하나뿐이고 문자열 변형이 없는 경우 CHAR 열을 삭제합니다.모든 열을 살펴보고 최소 2개의 다른 값이 있는지 확인하고 모든 단일 값 열을 삭제하는 스크립트를 어떻게 만들 수 있을지 궁금합니다. 수천 개의 '특징' 열이 있는데, 모두 문자 유형이지만, 상당수가 단일 레코드만 가지고 있습니다... 즉, 분포 수준 = 1입니다.
1개 레코드 열을 감지하고 삭제하는 방법은?
자동화 및 스크립팅Re: 값이 하나뿐이고 문자열 변형이 없는 경우 CHAR 열을 삭제합니다.다음은 모든 문자 열을 찾은 다음 목록의 끝에서 처음으로 이동하고 공백을 제외하고 단일 값만 발견되면 열을 삭제하는 간단한 스크립트입니다.
Names Default To Here( 1 );
dt = Current Data Table();
charCols = dt << get column names( string, character );
For( i = N Items( charCols ), i >= 1, i--,
Summarize( dt, bygroup = by( As Column( charCols[i] ) ) );
If( bygroup[1] == "",
Remove From( bygroup, 1, 1 )
);
If( N Items( bygroup ) <= 1,
dt << delete columns( Column( dt, charCols[i] ) )
);
);
Re: 값이 하나뿐이고 문자열 변형이 없는 경우 CHAR 열을 삭제합니다.Jim과 비슷한 아이디어입니다(summary를 사용하여 고유한 값을 가져온 다음 누락된 값이 있으면 제거합니다). 하지만 약간 다른 방식입니다. filter each를 사용하여 제거할 열을 찾은 다음 delete columns를 사용하여 동시에 모든 열을 제거합니다.
Names Default To Here(1);
dt = Current Data Table();
char_cols = dt << get column names(Character, String);
cols_to_remove = Filter Each({colname}, char_cols,
Summarize(dt, uniq = by(Column(dt, colname)));
Remove From(uniq, Contains(uniq, "")); // to remove missing values from list
N Items(uniq) == 1;
);
dt << Delete Columns(cols_to_remove);Re: 값이 하나뿐이고 문자열 변형이 없는 경우 CHAR 열을 삭제합니다.한 가지 주의할 점은 Jim과 저 둘 다 고유 값 목록에서 누락된 값을 제거한다는 것입니다. 데이터/모델/사용 사례에 따라 이를 별도의 값으로 간주하고 싶을 수도 있고(또는 고려해야 할 수도 있음) 이를 고려하세요. 두 스크립트 모두 이를 고려할 수 있지만 약간의 변경이 필요합니다.