ほとんど空のカテゴリ列を削除する誰か手伝ってくれませんか?
データベースから、一定の割合の欠落文字を含むカテゴリ列を削除する必要があり、同時に一定の割合の停滞値(100%である必要はありません)を含む数値列を削除したいと考えています。
ありがとう。フェリーチェ
Re: ほとんど空のカテゴリ列を削除する完璧な感謝です。
ハッピー
Re: ほとんど空のカテゴリ列を削除するはい、すべては設定方法次第です。最初のチェックでは、各列で最も一般的な値を見つけ、それがしきい値パーセンテージを上回っているか下回っているかを判断します。残念ながら、欠損値は値ではないため、最も一般的な値になることはできません。そのため、数値列では機能しません。 "" が欠落していて空の文字列値であるため、文字列では機能します。
それが物事の説明に役立つことを願っています。
より詳細な粒度が必要な場合は、異なる戦略を使用して、異なるパーセンテージで複数のループを実行するだけです。Re: ほとんど空のカテゴリ列を削除するこんにちは、msharp さん、ご返信ありがとうございます。別の質問をしましょう。パーセント変数はカテゴリ列と数値列の両方で機能しますか? 「はい」の場合、欠落ケースと停滞ケースに 2 つの異なる値を設定できますか?
おそらく愚かな質問で申し訳ありませんが、私は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 << delete columns(delcols)); </GETASMATRIX>Re: ほとんど空のカテゴリ列を削除するこんにちは
以下の 2 番目の表でスクリプトを試してみました。結果は次のとおりです。
ご覧のとおり、ほぼすべての必要な列を削除できましたが、2 番目の列 (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 << delete columns(delcols));
Re: ほとんど空のカテゴリ列を削除するあなたも次のようなものを探していると思います。
すべてのデータが 1 つの値のみの場合、数値列が削除されます。
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: ほとんど空のカテゴリ列を削除するもう 1 つの方法は、もう少し堅牢だと思います。
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] )
)
);