刪除幾乎空的分類列有人能幫幫我嗎?
從數據庫我需要刪除具有一定百分比缺失字符的分類列,同時我想刪除具有停滯值百分比的數字列(不必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 * 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>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)<<getasmatrix),mode(column(dt,i)<<getasmatrix))) > 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();
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] )
)
);