ほとんど空のカテゴリカル列を削除する誰かが私を助けることができる?
データベースから私は欠けている文字の特定の割合を持つカテゴリカル列を削除する必要があり、同時に私は停滞値の割合を持つ数値列を削除したい(100%必要ではない)。
ありがとう。 フェリーチェ
再:ほとんど空のカテゴリカル列を削除するどうもありがとう。
フェリーチェ
再:ほとんど空のカテゴリカル列を削除するうんそれはすべてあなたがそれを設定する方法に依存します。最初のチェックは、各列で最も一般的な値を見つけ、それがしきい値のパーセンテージより上か下かを判断します。残念ながら、欠損値は値ではないため、最も一般的な値にはなりません。それが数値列では機能しない理由です。これは文字列b / c ""に対しては動作しませんが、空の文字列値です。
説明してくれることを願っています。
もっと細かくしたい場合は、異なる戦略を使用して異なる割合で複数のループを実行するだけです。再:ほとんど空のカテゴリカル列を削除するこんにちはmsharpお返事をありがとう。別の質問をしましょう。パーセント変数は、カテゴリカル列と数値列の両方で機能しますか。もしそうなら、私は行方不明と停滞のケースの2つの異なる値を持つことができますか?
愚かな質問ですみませんが、私はjsl言語の専門家ではありません。
フェリーチェ
再:ほとんど空のカテゴリカル列を削除する戦略を組み合わせるだけです。 何かのようなもの:
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 * percent/100,
insert into(delcols, i);
,
if(Col N Missing(column(dt,i)) > numRows * percent/100,
insert into(delcols, i);
);
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols)); </GETASMATRIX>再:ほとんど空のカテゴリカル列を削除するこんにちは
下の2番目の表でスクリプトを試してみましたが、結果はここにあります。
ご覧のとおり、ほとんどすべての必要な列を削除できましたが、2番目の列(col2)は削除できませんでした。 削除するにはどうすればいいですか。
ありがとうFelice


再:ほとんど空のカテゴリカル列を削除するあなたは前に投稿した方法を使用することができるかもしれませんが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)<<getasmatrix),mode(column(dt,i)<<getasmatrix))) > numRows * percent/100,
insert into(delcols, i);
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols));
再:ほとんど空のカテゴリカル列を削除する私はあなたもこのようなものを探していると思います:
すべてのデータが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));再:ほとんど空のカテゴリカル列を削除するもう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));
再:ほとんど空のカテゴリカル列を削除するこれは、指定したパーセント以下のデータを含む列を削除する、手っ取り早い汚れたスクリプトです。
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] )
)
);