거의 비어 있는 범주형 열 제거누군가 나를 도와줄 수 있나요?
데이터베이스에서 특정 비율의 누락된 문자가 있는 범주형 열을 제거해야 하며 동시에 정체된 값의 비율(100%일 필요는 없음)이 있는 숫자 열을 제거하고 싶습니다.
감사해요. 펠리체
Re: 거의 비어 있는 범주형 열을 제거합니다.완벽해요. 감사합니다.
행복하다
Re: 거의 비어 있는 범주형 열을 제거합니다.네, 설정 방법에 따라 다릅니다. 첫 번째 확인은 각 열에서 가장 일반적인 값을 찾고 해당 값이 임계값 백분율보다 높은지 낮은지 확인하는 것입니다. 안타깝게도 누락된 값은 값이 아니므로 가장 일반적일 수는 없습니다. 이것이 숫자 열에서 작동하지 않는 이유입니다. 문자 열에서 작동합니다. b/c ""가 모두 누락되고 빈 문자열 값입니다.
설명하는 데 도움이 되기를 바랍니다.
더 세분화하려면 다양한 전략을 사용하여 다양한 비율로 여러 루프를 실행하세요.Re: 거의 비어 있는 범주형 열을 제거합니다.안녕하세요 msharp 답장을 보내주셔서 감사합니다. 또 다른 질문을 해보자. 범주형 열과 숫자 열 모두에서 백분율 변수가 작동합니까? 그렇다면 누락된 케이스와 정체된 케이스에 대해 서로 다른 두 가지 값을 가질 수 있습니까?
어리석은 질문이라 죄송하지만 저는 jsl 언어 전문가가 아닙니다.
행복하다
Re: 거의 비어 있는 범주형 열을 제거합니다.전략을 결합하면 됩니다. 다음과 같은 것 :
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
if(nrows(loc(aslist(column(dt,i)<<GETASMATRIX> numRows * 퍼센트/100, insert into(delcols, i); , if(Col N Missing(column(dt,i)) > numRows * 퍼센트/100, insert into(delcols, i); ); ); ); if(nitems(delcols) > 0, dt << 열 삭제(delcols)); </GETASMATRIX>Re: 거의 비어 있는 범주형 열을 제거합니다.안녕
아래 두 번째 테이블에서 스크립트를 시도했는데 결과가 여기에 있습니다.
보시다시피 원하는 열을 거의 모두 제거할 수 있었지만 두 번째 열(col2)은 제거할 수 없었습니다. 그것도 제거하려면 어떻게 해야 하나요?
고마워요 펠리스


Re: 거의 비어 있는 범주형 열을 제거합니다.이전에 게시한 방법을 사용할 수 있지만 100% 미만의 경우 열 모드를 사용할 수 있습니다.
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
if(nrows(loc(aslist(column(dt,i)< numRows * 퍼센트/100, insert into(delcols, i); ); ); if(nitems(delcols) > 0, dt << 열 삭제(delcols));
Re: 거의 비어 있는 범주형 열을 제거합니다.나는 당신이 다음과 같은 것을 찾고 있다고 생각합니다.
모든 데이터가 하나의 값인 경우 숫자 열을 삭제합니다.
Names Default To Here( 1 );
dt = Current Data Table();
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
col = column(dt, i);
try(summarize(dt, max = max(col), min = min(col));
if((max == min) | (ismissing(max)),
insertinto(delcols, i);
)
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols));Re: 거의 비어 있는 범주형 열을 제거합니다.또 다른 방법은 약간 더 강력하다고 생각합니다.
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
col = column(dt, i);
nmissing = col N missing(col);
if(nmissing > numRows * percent/100,
insert into(delcols, i);
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols));
Re: 거의 비어 있는 범주형 열을 제거합니다.다음은 지정된 비율 미만의 데이터가 포함된 열을 제거하는 빠르고 더러운 스크립트입니다.
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
colList = dt << get column names( character, string );
NumRows = N Rows( dt );
For( i = N Items( colList ), i >= 1, i--,
If( Col Number( Column( dt, i ) ) / NumRows * 100 < percent,
dt << delete columns( colList[i] )
)
);